我有以下流式代码:
/* @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
类型?
最佳答案
DefaultFoo
是T
类型的假设错误。
看一下这个例子(Bar
在这种情况下是我们的 T
):
type Foo = {};
interface Bar extends Foo {
bar(): void;
}
const DefaultFoo: Foo = {};
Bar
扩展 Foo
,所以 Bar
是 Foo
但不是相反。
DefaultFoo
不是 Bar
关于javascript - 如何让 Flow 相信一个值符合泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48552519/