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來包含構造函數嗎? –
注意:您*可以*通過使用無名函數導出構造函數。 –