(这是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>);
}
}
问题是在foo
OtherModule.OtherInterface
使用上面的代码我得到了这个奇怪的编译器输出(使用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.
如果我在OtherInterface
内声明MyModule
并忘记模块名称,我可以编译它,但接口在现实世界的不同模块中。
如何让它正常工作?
答案 0 :(得分:5)
这看起来像编译器错误 - 编译器没有意识到您正在尝试使用名为SomeClass
的类而不是名为SomeClass
的模块。
好消息是你的声明实际上是好的,编译器的下一个版本(0.9.5)将非常满意。
你可以download the 0.9.5 beta,它有一些错误修复和性能改进(但显然是测试版...但我正在使用它,它看起来很稳定)。