2013-12-05 1 views
0

у меня есть это странное поведение с версией машинописи компилятора 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, проблема исчезла. Я знаю, что это очень специальный прецедент (параметр типа влияет только на тип возвращаемого значения, в моем случае у меня есть еще один параметр, который неявно имеет эту информацию), но прямо сейчас так выглядит моя существующая библиотека как.

Я делаю что-то неправильно или это ошибка в компиляторе?

ответ

0

Определенно ошибка компилятора - это работает в версии 0.9.1.1.

+0

Спасибо! Должен ли я подать ошибку или вы? – Sebastian

+1

Уже зафиксировано в ветке разработки –

Смежные вопросы