首页 文章

如何将javascript AMD模块导入外部TypeScript模块?

提问于
浏览
7

如何将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方式中学习如何做到这一点,那么我可以继续完成我的项目的模块化 .

1 回答

  • 2

    我现在如何修改main.ts以便我可以加载和使用这个log.js AMD模块?

    如果你只有log.js可用,你可以使用 declarelog 告诉typescript有关类型信息,即创建一个 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");
    

相关问题