背景
目前在我工作的地方,我们使用 dojo.requires 来导入我们在每个类中使用的所有需要的类。然而,在 Dojo 2.0 中,他们正在摆脱 dojo.require 并采用 amd require 样式(http://livedocs.dojotoolkit.org/releasenotes/migration-2.0):
require(["dijit/form/Button", "dojox/layout/ContentPane", ...],
function(Button, ContentPane, ...){
// CODE HERE
});
我们目前在自己的 .d.ts 文件中定义了我们的 dojo/dijit 类,如下所示:
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 {}
问题
我们希望能够让 typescript 生成 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
})
但是,这不起作用,因为 import 仅适用于模块而不适用于类。我们收到如下错误:
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....
}
有没有办法可以实现我们正在尝试做的事情?
谢谢