2012-10-25 195 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的外部需求中? –