首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将模块作为类导入(dojo)

将模块作为类导入(dojo)
EN

Stack Overflow用户
提问于 2012-11-24 07:29:52
回答 1查看 1.5K关注 0票数 4

背景

目前在我工作的地方,我们使用dojo.requires导入每个类所需的所有类。然而,在Dojo2.0中,他们正在摆脱dojo.require,转而使用amd require ( http://livedocs.dojotoolkit.org/releasenotes/migration-2.0 ):

代码语言:javascript
复制
require(["dijit/form/Button", "dojox/layout/ContentPane", ...], 
   function(Button, ContentPane, ...){
    // CODE HERE
});

我们目前在自己的.d.ts文件中定义了dojo/dijit类,如下所示:

代码语言:javascript
复制
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;
    }
}

这使我们可以像下面这样扩展这些类:

代码语言:javascript
复制
class CustomButton extends dijit.form.Button {}

问题

我们希望能够让typescript生成Dojo2.0 (amd)样式所需的内容,并执行以下操作:

代码语言:javascript
复制
import Button = module("dijit/form/Button")
class CustomButton extends Button {}

我们希望它能编译成类似下面这样的代码:

代码语言:javascript
复制
define(["require", "exports", "dijit/form/Button"], function(require, exports, Button)    
{
    ///....Generated class    
})

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

代码语言:javascript
复制
The name '"dijit/form/Button"' does not exist in the current scope
A module cannot be aliased to a non-module type

我们还尝试像这样定义dijit类:

代码语言:javascript
复制
declare module "dijit/form" {
    export class Button....
}

有没有办法实现我们想要做的事情?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-26 00:22:30

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

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

您可以使用以下命令加载它

代码语言:javascript
复制
import forms = module("dijit.forms");

var button = new forms.Button();

在AMD应用程序的定义文件中,您不需要声明模块,因为该文件就是模块。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13536872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档