![](/img/trans.png)
[英]Re: How can I import a javascript AMD module into an external TypeScript module? (When using module.exports=…)
[英]How can I import a javascript AMD module into an external TypeScript module?
如何將javascript AMD模塊導入外部TypeScript模塊?
我正在模塊化我的客戶端TypeScript程序以使用由bower管理的AMD模塊。 作為此過程的一部分,Typescript模塊成為一個javascript AMD模塊,然后我發布。 現在我有一個我希望包含在TypeScript模塊中的javascript AMD模塊,我不想發布帶有javascript AMD的原始TypeScript。
我無法弄清楚如何編寫我的TypeScript代碼,以便它將加載沒有相應TypeScript的javascript AMD模塊,並且看起來最新版本的TypeScript還不支持這個。
如果我從0.9.7 TypeScript規范的示例開始,請參見第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模塊的“log”引用。 下面是通過運行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方式中學習如何做到這一點,那么我可以繼續完成我的項目的模塊化。
我現在如何修改main.ts以便我可以加載和使用這個log.js AMD模塊?
如果你只有log.js可用,你可以使用declare
告訴typescript關於log
的類型信息,即創建一個log.d.ts
:
declare module 'log'{
export function message(s:string);
}
然后從main.ts使用它:
/// <reference path='log.d.ts'/>
import log = require('log');
log.message("hello");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.