javascript - 如何让 Flow 相信一个值符合泛型类型?

标签 javascript types flowtype

我有以下流式代码:

/* @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 类型?

最佳答案

DefaultFooT 类型的假设错误
看一下这个例子(Bar 在这种情况下是我们的 T):

type Foo = {};

interface Bar extends Foo {
  bar(): void;
}

const DefaultFoo: Foo = {};

Bar 扩展 Foo,所以 BarFoo 但不是相反。
DefaultFoo 不是 Bar

关于javascript - 如何让 Flow 相信一个值符合泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48552519/

相关文章:

c# - "object as type"和 "((type)object)"有什么区别?

javascript - 为具有多个模块位置的 webpack resolve.modules 设置采用 flowtype 配置

javascript - React 从组件外部的函数调用中设置 Hook

javascript - 在 livewire 中的 $set 魔术 Action 中传递 bool 值

javascript - 舍入 Json 对象的所有对象中的小数值

javascript - 流错误 : property is missing in . .. 但存在于

node.js - 如何从 npm 发布的模块中导入流注解、类型和接口(interface)

javascript - 默认情况下限制所有 observable 的速率

types - 哪些工具可用于检查/探测 Julia 中的类型

scala - 为什么类型级计算需要 Aux 技术?