у меня есть это странное поведение с версией машинописи компилятора 0.9.5 бета:машинопись Компилятор сообщение: «Ошибка TS2137: Класс объявляет интерфейс, но не реализует его»
Учитывая это (урезанный) код в библиотеке файл определения 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
, проблема исчезла. Я знаю, что это очень специальный прецедент (параметр типа влияет только на тип возвращаемого значения, в моем случае у меня есть еще один параметр, который неявно имеет эту информацию), но прямо сейчас так выглядит моя существующая библиотека как.
Я делаю что-то неправильно или это ошибка в компиляторе?
Спасибо! Должен ли я подать ошибку или вы? – Sebastian
Уже зафиксировано в ветке разработки –