我正在使用打字稿开发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 :(
任何帮助表示感谢。
答案 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"/>
有效: