(这是对这个答案的跟进.)
我正在尝试为现有的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>);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是泛型方法的声明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并保留模块名称,我可以编译它,但是接口在现实世界中的不同模块中.
我怎样才能让它正常工作?
这看起来像编译器错误 - 编译器没有意识到您正在尝试使用命名的类SomeClass而不是命名的模块SomeClass.
好消息是你的声明实际上是好的,下一版本的编译器(0.9.5)将非常满意.
你可以下载0.9.5 beta,它有一些bug修复和性能改进(但显然是beta ...但我正在使用它,它似乎稳定).
| 归档时间: |
|
| 查看次数: |
1295 次 |
| 最近记录: |