我对typescript编译器版本0.9.5 beta有这种奇怪的行为:
在库定义文件lib.d.ts
中给出这个(精简的)代码:
declare module Test {
export interface GenericInterface<T> {
method(t:T):T;
}
export interface IFoo {
generic<T>(): GenericInterface<T>;
}
export class Foo implements IFoo {
generic<T>(): GenericInterface<T>;
}
}
我为Foo
类的声明得到了这个编译器错误:
error TS2137: Class Foo declares interface IFoo but does not implement it:
Types of property 'generic' of types 'Foo' and 'IFoo' are incompatible:
Call signatures of types '<T>() => GenericInterface<T>' and '<T>() => GenericInterface<T>' are incompatible:
Types of property 'method' of types 'GenericInterface<{}>' and 'GenericInterface<T>' are incompatible:
Call signatures of types '(t: {}) => {}' and '(t: T) => T' are incompatible.
有趣的是,如果method
没有泛型返回值,编译器很高兴。此外,如果T
的参数列表中存在generic
类型,问题就会消失。
我知道这是一个非常特殊的用例(类型参数只影响返回类型;在我的情况下,我确实有另一个参数,隐含地具有该信息),但是现在这就是我现有库的样子
我做错了什么,或者这是编译器中的错误?
答案 0 :(得分:0)
绝对是编译器错误 - 这适用于0.9.1.1。