我有以下流式代码:
/* @flow */
type Foo = 1;
const DefaultFoo: Foo = 1;
function getDefault<T: Foo>(): T {
return DefaultFoo;
}
当我尝试运行它时,这是我得到的错误:
8: return DefaultFoo;
^ number literal `1`. This type is incompatible with the expected return type of
7: function getDefault<T: Foo>(): T {
^ T
这是一个flow.org/try链接:https://flow.org/try/#0PQKgBAAgZgNg9gdzCYAoVAXAngBwKZgBiccYAvGAIwDc6AxnAHYDOGYAInlAIYCuMGYnABcREuSq1UUXozoYAlkzABzPBk49+GADwAVUUIB8ACgCUovWADeqMGABO63g8YcufAUNoBfIA
有人可以解释代码有什么问题,以及我如何说服Flow DefaultFoo
确实属于T
类型?
答案 0 :(得分:1)
假设DefaultFoo
类型为T
错误。
看一下这个例子(在这种情况下Bar
是我们的T
):
type Foo = {};
interface Bar extends Foo {
bar(): void;
}
const DefaultFoo: Foo = {};
Bar
延伸Foo
,因此Bar
是Foo
,但不是相反。
DefaultFoo
<{1}}