如何将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方式中学习如何做到这一点,那么我可以继续完成我项目的模块化。
答案 0 :(得分:2)
我现在如何修改main.ts以便加载和使用这个log.js AMD模块?
如果您只有log.js可用,您可以使用log
告诉打字稿来自declare
的类型信息,即创建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");