使用外部模块时创建单个.d.ts的问题

时间:2014-10-31 16:57:21

标签: npm typescript

我正在使用打字稿开发NPM包。在此包中,TS文件被设置为外部模块。编译器不会为外部模块生成单个.d.ts。我试图将所有tsc生成的类型定义连接到整个包的单个.d.ts中。

我在列出单个.d.ts文件时遇到问题(遵循与grunt-dts-bundle中使用的方法类似的方法)。下面的简要示例捕获了我的问题。

鉴于此外部模块声明和测试文件:

test.d.ts

declare module "ExternalWrapper" {
    export import Foo = require("FooModule");
}

declare module "FooModule" {
    class Foo {
        name: string;
    }
     export = Foo;
}

test.ts

import externalWrapper = require( 'ExternalWrapper' );
var t = new externalWrapper.Foo();

正在运行tsc test.ts test.d.ts -m commonjs会产生此错误:TS2083: Invalid 'new' expression.

如果你改变了'test.ts'看起来像这样,导入' FooModule'直接:

import Foo = require( "FooModule" );
var t = new Foo();

它汇编得很好。

编译器理解类型externalWrapper.Foo但是它似乎并没有将它表示为相同的类型FooModule.Foo。我无法了解编译器如何处理通过“导出导入”导出的模块。

如果不能解决上述问题,我可能会尝试手动创建.d.ts :(

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:2)

您应该可以通过将.d.ts文件修改为类似以下内容来解决此问题:

declare module "ExternalWrapper" {
    import FooModule = require("FooModule");
    export var Foo: typeof FooModule;
}

declare module "FooModule" {
    class Foo {
        name: string;
    }
    export = Foo;
}

使用export import语法,编译器假设您正在导出Foo的实例,而不是Foo本身...有点古怪。

答案 1 :(得分:2)

您可能缺少reference标记:

/// <reference path="test.d.ts"/>

有效:

enter image description here