Я пробовал это с потоком 0.57.3
и 0.59.0
Я определяю интерфейс для классов, которые содержат вещи:
interface IHolder<SomeType> {
give(): SomeType;
}
Теперь я определяю класс, который реализует этот интерфейс:
class AHolderOfNumber implements IHolder<number> {
give(): number {
return 42;
}
}
Сейчас я определяю тип для функций, которые используют такие держатели вещей:
type FunctionThatUsesAHolder<SomeType> = (x: IHolder<SomeType>)=>void;
Сейчас я определяю функцию, которая использует AHolderOfNumber
:
function foo(x : AHolderOfNumber) {} // do nothing, this is just an example
Пока все хорошо, все проверено.
В моей книге, поскольку класс AHolderOfNumber
реализует IHolder<number>
, следует, что функция foo
имеет тип FunctionThatUsesAHolder<number>
.
Тем не менее, строка ниже не проходит проверку типов:
(foo : FunctionThatUsesAHolder<number>)
Поток жалуется на:
Error: src/example.js:69
69: (foo : FunctionThatUsesAHolder<number>)
^^^^ function. This type is incompatible with
69: (foo : FunctionThatUsesAHolder<number>)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function type
This parameter is incompatible:
57: type FunctionThatUsesAHolder<SomeType> = (x: IHolder<SomeType>)=>void;
^^^^^^^^^^^^^^^^^ IHolder. This type is incompatible with
65: function foo(x : AHolderOfNumber) {
^^^^^^^^^^^^^^^ AHolderOfNumber
Found 1 error
Что дает?