【发布时间】:2013-12-03 11:11:57
【问题描述】:
(这是对this answer的跟进。)
我正在尝试为现有的 Javascript 库构建打字稿定义文件。我遇到的困难与以下组合有关:
- 嵌套类型
- 泛型
- 命名构造函数(与嵌套类型非常相似)
这是我试图在 lib.d.ts 库定义文件中编译的代码:
declare module MyModule {
export class SomeClass<T> {
new(); // default (unnamed) constructor for SomeClass
static WithEnumValue: { // "named constructor" for SomeClass
new <T>(enumValue: MyModule.SomeClass.SomeEnum): SomeClass<T>;
};
}
export module SomeClass {
export enum SomeEnum { VALUE_A, B, C }
}
}
declare module OtherModule {
export interface OtherInterface {
foo<T>(inst: MyModule.SomeClass<T>);
}
}
问题在于OtherModule.OtherInterface中泛型方法foo的声明
使用上面的代码,我得到了这个奇怪的编译器输出(使用 tsc 编译器 0.9.1.1):
error TS2090: Generic type 'MyModule.SomeClass' requires 0 type argument(s).
显然很难声明具有 0 类型参数的泛型类型,因为 <> 和没有类型参数的变体 MyModule.SomeClass 都不起作用 - 后者会给出这个稍微矛盾的错误:
error TS2173: Generic type references must include all type arguments.
如果我在MyModule 中声明OtherInterface 并省略模块名称,我可以编译它,但接口在现实世界中的不同模块中。
我怎样才能让它正常工作?
【问题讨论】:
标签: typescript