dojo - Typescript 可以使用現有的 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");
有可能嗎?
答案#1
你將需要一個 lang 的 TypeScript 定義檔。假設 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});
3rd/lang.d.ts:
declare module 'dojo/_base/lang' {
...
}
產生與上述相同的結果。
答案#2
您通常可以通過 dojo 加載器加載模組,您不必使用 import 語句。但如果您想要,您必須聲明該模組:
declare module "dojo/_base/lang" {
export function ...
export class ...
}
