Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 将模块作为类导入(dojo) 背景_Typescript - Fatal编程技术网

Typescript 将模块作为类导入(dojo) 背景

Typescript 将模块作为类导入(dojo) 背景,typescript,Typescript,目前在我工作的地方,我们使用dojo.requires来导入每个类所需的所有类。然而,在Dojo 2.0中,他们正在摆脱Dojo.require,转而使用amd require样式(): 我们目前在自己的.d.ts文件中定义了dojo/dijit类,如下所示: module dijit.form{ export class Button extends dijit.form._FormWidget { showLabel : bool; _onClick

目前在我工作的地方,我们使用dojo.requires来导入每个类所需的所有类。然而,在Dojo 2.0中,他们正在摆脱Dojo.require,转而使用amd require样式():

我们目前在自己的.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 {}
define(["require", "exports", "dijit/form/Button"], function(require, exports, Button)    
{
    ///....Generated class    
})
问题 我们希望能够让typescript生成Dojo 2.0(amd)所需的样式,并执行以下操作:

import Button = module("dijit/form/Button")
class CustomButton extends Button {}
我们曾希望将其编译成如下内容:

class CustomButton extends dijit.form.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....
}
有没有一种方法可以实现我们正在努力做的事情


谢谢

在AMD模块中,模块等同于文件,因此如果您有一个名为:

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

您可以使用

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

var button = new forms.Button();

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

感谢您的响应,我们可以让它这样工作,但问题是dojo的模块是类。使用您的示例,typescript将生成类似于“define”([“require”,“exports”,“dijit/form”],…”的定义,但我们需要它类似于“define”([“require”,“exports”,“dijit/form/Button”]一种选择是
声明var define:any;
并完全按照您的需要包含define语句。您也可以为define包含更完整的声明。