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

Npm 使用外部模块时创建单个.d.ts的问题,npm,typescript,Npm,Typescript,我正在使用typescript开发一个NPM包。在这个包中,TS文件被设置为外部模块。编译器不会为外部模块生成单个.d.ts。我正在尝试将所有tsc生成的类型定义合并到一个用于整个包的.d.ts中 我在布局单个.d.ts文件时遇到问题(遵循与grunt dts捆绑包中使用的方法类似的方法)。下面的简明示例抓住了我的问题 给定此外部模块声明和测试文件: test.d.ts: declare module "ExternalWrapper" { export import Foo = req

我正在使用typescript开发一个NPM包。在这个包中,TS文件被设置为外部模块。编译器不会为外部模块生成单个.d.ts。我正在尝试将所有tsc生成的类型定义合并到一个用于整个包的.d.ts中

我在布局单个.d.ts文件时遇到问题(遵循与
grunt dts捆绑包中使用的方法类似的方法)。下面的简明示例抓住了我的问题

给定此外部模块声明和测试文件:

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:无效的“new”表达式。

如果将“test.ts”更改为如下所示,则直接导入“FooModule”:

import Foo = require( "FooModule" );
var t = new Foo();
它编译得很好

编译器理解类型
externalWrapper.Foo
,但它似乎并不表示为相同的类型
FooModule.Foo
。关于编译器如何处理通过“导出-导入”导出的模块,我没有了解一些东西

如果上述操作失败,我可能会手动创建.d.ts:(


非常感谢您的帮助。

您应该能够通过修改.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本身……有点奇怪。

您可能缺少一个
reference
标记:

/// <reference path="test.d.ts"/>
//
它的工作原理是:


干杯,就是这样。我已经在typescript问题列表中看到了您关于external module.d.ts代的问题,如果实现了这一点,希望这会消失:)