2012-11-23 79 views
3

背景

目前在我工作的地方,我们用dojo.requires导入所有我们需要的类,我们每一类使用。然而,在道场2.0它们摆脱dojo.require的和去AMD需要风格(http://livedocs.dojotoolkit.org/releasenotes/migration-2.0):进口模块,类(道场)

require(["dijit/form/Button", "dojox/layout/ContentPane", ...], 
    function(Button, ContentPane, ...){ 
    // CODE HERE 
}); 

目前,我们已经把我们的道场/ dijit的类,比如在自己的.d.ts以下定义文件:

module dijit.form{ 
    export class Button extends dijit.form._FormWidget { 
     showLabel : bool; 
     _onClick (e:any) : any; 
     _onButtonClick (e:any) : any; 
     _setShowLabelAttr (val:any) : any; 
     _clicked (e:any) : any; 
     setLabel (content:String) : any; 
     _setLabelAttr (content:String) : any; 
     _setIconClassAttr (val:String) : any; 
    } 
} 

这使我们能够延长像下面这些类:

class CustomButton extends dijit.form.Button {} 

问题

我们希望能够有打字稿产生了Dojo 2.0(AMD)的风格要求,并做类似如下:

import Button = module("dijit/form/Button") 
class CustomButton extends Button {} 

我们曾希望将汇编成类似以下内容:

define(["require", "exports", "dijit/form/Button"], function(require, exports, Button)  
{ 
    ///....Generated class  
}) 

但是,这不起作用,因为导入只适用于模块而不适用于类。我们得到如下错误:

The name '"dijit/form/Button"' does not exist in the current scope 
A module cannot be aliased to a non-module type 

我们也试图定义喜欢的dijit类:

declare module "dijit/form" { 
    export class Button.... 
} 

有没有一种方法,我们可以实现我们正在尝试做的?

感谢

回答

1

在AMD模块,一个模块等同于一个文件,所以如果你有一个文件名为:

dijit.forms.ts甚至dijit.forms.d.ts

你可以通过加载它

import forms = module("dijit.forms"); 

var button = new forms.Button(); 

内部对于AMD一个定义文件应用程序不需要声明模块,因为文件是模块。

+0

感谢您的回应,我们可以像这样工作,但问题是dojo的模块是类。使用你的例子,typescript会产生像define([“require”,“exports”,“dijit/form”],''这样的定义,但我们需要它像'define([“require”,“出口“,”dijit/form/Button“] ...' – stopyoukid

+0

另一种方法是声明var define:any;并且包含define声明,你可以包含更完整的声明。 – Fenton