網站搜尋

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 ...
}