2012-10-25 198 views
2

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"); 

可以吗?

回答

2

你需要一个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' { 
... 
} 

生成与上述相同。

+0

这工作......但如果它是具有构造函数的dojo/store/Memory呢?无法导出构造函数,因此需要将其包含在类定义中(我猜)。然后导入Memory = module(“dojo/store/Memory”)需要Memory.Memory()而不是Memory()。你可以充实一个Memory.d.ts来包含构造函数吗? –

+1

注意:您*可以*通过使用无名函数导出构造函数。 –

0

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

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

据我所知,我可以以我在问题中显示的相同方式加载模块,但我将如何从打字稿中做到这一点,以便它出现在生成的js的外部需求中? –