Npm 使用外部模块时创建单个.d.ts的问题
我正在使用typescript开发一个NPM包。在这个包中,TS文件被设置为外部模块。编译器不会为外部模块生成单个.d.ts。我正在尝试将所有tsc生成的类型定义合并到一个用于整个包的.d.ts中 我在布局单个.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
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代的问题,如果实现了这一点,希望这会消失:)