簡體   English   中英

如何將javascript AMD模塊導入外部TypeScript模塊?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM