如何將JavaScript AMD模塊導入外部TypeScript模塊?如何將JavaScript AMD模塊導入外部TypeScript模塊?
我將我的客戶端TypeScript程序模塊化以使用由bower管理的AMD模塊。 作爲這個過程的一部分,Typescript模塊成爲一個JavaScript AMD模塊,然後我發佈。 現在我有一個JavaScript AMD模塊,我想包含在TypeScript模塊中,而且我不想用JavaScript AMD發佈原始TypeScript。
我無法弄清楚如何編寫我的TypeScript代碼,以便加載一個沒有對應的TypeScript的JavaScript AMD模塊,並且看來最新版本的TypeScript還不支持這一點。
如果我開始與來自0.9.7打字稿說明書的例子中,部分11.2:
文件main.ts:
import log = require("./log");
log.message("hello");
文件log.ts:
export function message(s: string) {
console.log(s);
}
我相信我應該能夠修改main.ts,以便編譯器解析對log.js AMD模塊的「日誌」引用。 以下是運行tsc --module amd main.ts生成的log.js文件。這是一個正確的AMD模塊。
文件log.js:
define(["require", "exports"], function(require, exports) {
function message(s) {
console.log(s);
}
exports.message = message;
});
爲了模擬具有一個JavaScript AMD模塊,編譯上述例子中,並刪除文件log.ts。 如果現在嘗試使用同一命令來編譯時,出現以下錯誤:
./main.ts(1,1): error TS2071: Unable to resolve external module '"./log"'.
./main.ts(1,1): error TS2072: Module cannot be aliased to a non-module type.
如何我現在可以修改main.ts所以它編譯並解決針對此log.js AMD模塊? 如果需要,我可以編寫log.d.ts文件,但是想要一個沒有聲明文件的方法。
如果我可以學會如何在規範的TypeScript方法中做到這一點,那麼我可以繼續我的項目的完整模塊化。
這就像你寫的一樣。但是如果我保留原始示例中的名稱「./log」,那麼它將無法編譯。我搜索了語言規範並找到了第12.1.6節「環境外部模塊聲明」,它描述了模塊名稱是頂級(非相對)名稱的限制。但是,我無法找到解釋爲什麼這是如此。我只能猜測這樣的命名沒有真正的需要? 你有解釋這個限制嗎?謝謝 – psnider
Js文件應該來自npm或來自您的RequireJS配置。這兩種情況下的名稱都不是相對的 – basarat
我發現使用字符串作爲AMD模塊名稱的要求令人困惑,但發現這篇文章描述了用法:https://typescript.codeplex.com/wikipage?title=Modules 20英寸%%20TypeScript – psnider