打字稿可以消耗现有的AMD吗?

时间:2012-10-25 16:49:33

标签: dojo typescript js-amd

Dojo 1.8已经定义了AMD模块。例如,您可以执行以下操作:

require(["dojo/_base/lang"], function (lang) {
  var ab = lang.mixin({a: 1}, {b: 2});
});

但是,当我尝试导入此模块时,如何避免出错?

import lang = module ("dojo/_base/lang");

有可能吗?

2 个答案:

答案 0 :(得分:2)

您需要lang的打字稿定义文件。假设lang.d.tslang.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' {
...
}

生成与上面相同的内容。

答案 1 :(得分:0)

您通常可以通过dojo加载器加载模块,您不必使用import语句。但是如果你想要你必须声明模块:

declare module "dojo/_base/lang" {
  export function ...
  export class ...
}