小编psn*_*der的帖子

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

如何将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"); 
Run Code Online (Sandbox Code Playgroud)

文件log.ts:

export function message(s: string) { 
    console.log(s); 
}
Run Code Online (Sandbox Code Playgroud)

我相信我应该能够修改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;
});
Run Code Online (Sandbox Code Playgroud)

要模拟具有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.
Run Code Online (Sandbox Code Playgroud)

我现在如何修改main.ts以便它编译并解析这个log.js AMD模块?如果必须的话,我可以编写log.d.ts文件,但是想要一个没有声明文件的方法.

如果我可以在规范的TypeScript方式中学习如何做到这一点,那么我可以继续完成我的项目的模块化.

javascript module amd external typescript

7
推荐指数
1
解决办法
6096
查看次数

如何为具有构造函数的外部commonjs模块编写TypeScript声明文件?

请参阅更多详细问题:如何为具有imap等构造函数的复杂外部commonjs模块编写TypeScript声明文件?

我为Node.js应用程序编写TypeScript,并且我想为在模块级别具有构造函数的javascript模块(可从npm获取)编写TypeScript声明文件。

这是文件a.js中相关代码的简化版本:

function A(config) {
    this.state = 'constructed';
}
A.prototype.update = function() {
    this.state = 'updated';
};
module.exports = A;
Run Code Online (Sandbox Code Playgroud)

和一个简化的javascript应用程序app.js,它使用模块a:

var mod = require('a');
var i = new mod({});
console.log('i.state=' + i.state);
i.update();
console.log('i.state=' + i.state);
Run Code Online (Sandbox Code Playgroud)

如何为模块a.js编写TypeScript声明文件?

我已阅读《TypeScript书写定义(.d.ts)文件指南》, 但不幸的是,我无法弄清楚如何将指南应用于这种情况。


更新为包括接口

这是我的声明文件adts:

declare module 'a' {
    import events                           = require('events');
    import EventEmitter                     = events.EventEmitter;

    interface Config {
        foo: number;
    }
    interface Other {
        baz: number;
    }

    class …
Run Code Online (Sandbox Code Playgroud)

declaration commonjs node.js typescript

5
推荐指数
1
解决办法
3819
查看次数