Dojo 1.8已经定义了AMD模块。例如,你可以做这样的事情:Typescript能否消耗现有的AMD?
require(["dojo/_base/lang"], function (lang) {
var ab = lang.mixin({a: 1}, {b: 2});
});
但是,当我试图导入此模块时如何避免出现错误?
import lang = module ("dojo/_base/lang");
可以吗?
Dojo 1.8已经定义了AMD模块。例如,你可以做这样的事情:Typescript能否消耗现有的AMD?
require(["dojo/_base/lang"], function (lang) {
var ab = lang.mixin({a: 1}, {b: 2});
});
但是,当我试图导入此模块时如何避免出现错误?
import lang = module ("dojo/_base/lang");
可以吗?
你需要一个lang的打字稿定义文件。假设lang.d.ts
在同一个目录中存在的lang.js
此代码:
import lang = module('dojo/_base/lang')
var ab = lang.mixin({a: 1}, {b: 2});
与
tsc --module amd yourfile.ts
编译生成
define(["require", "exports", 'dojo/_base/lang'], function(require, exports, __lang__) {
var lang = __lang__;
var ab = lang.mixin({a: 1}, {b: 2});
}
如果你不希望有匹配的目录结构不管出于何种原因都会这样做。假设lang.d.ts
位于名为3rd
的子目录中,该子目录是test.ts
的同胞。
test.ts:
///<reference path="3rd/lang.d.ts"/>
import lang = module('dojo/_base/lang');
var ab = lang.mixin({a: 1}, {b: 2});
第三/ lang.d.ts:
declare module 'dojo/_base/lang' {
...
}
生成与上述相同。
您通常可以通过dojo加载器加载模块,您不必使用import语句。但是如果你想要你必须声明模块:
declare module "dojo/_base/lang" {
export function ...
export class ...
}
据我所知,我可以以我在问题中显示的相同方式加载模块,但我将如何从打字稿中做到这一点,以便它出现在生成的js的外部需求中? –
这工作......但如果它是具有构造函数的dojo/store/Memory呢?无法导出构造函数,因此需要将其包含在类定义中(我猜)。然后导入Memory = module(“dojo/store/Memory”)需要Memory.Memory()而不是Memory()。你可以充实一个Memory.d.ts来包含构造函数吗? –
注意:您*可以*通过使用无名函数导出构造函数。 –