javascript - 如何根据输入类型定义 flow.js 输出类型

标签 javascript flowtype

我是 flow.js 的新手,我有一个相当简单的问题: 假设我有一个函数,将类型 A 或类型 B 作为输入,如果输入是 A,则返回类型 AA,或者如果输入是 B,则返回类型 BB:

type A = {|a: string|}
type B = {|b: string|}
type AA = {|aa: string|}
type BB = {|bb: string|}
const f = (x: A | B, type: string): AA | BB => type === "A" ? {aa: "AA"}: {bb: "BB"}

我的问题是我不能这样做:

const x: A = {a: "x"}
const y: AA = f(x, "A")

y 需要为 AA 类型 | BB

我尝试使用参数化泛型,例如

type C<T> = typeof(T) === "A" ? AA : BB;

但是好像没用

有办法做到这一点吗?

最佳答案

这是您希望对函数进行多个声明的地方。

Here's an example

declare function f(x: A, type: string): AA
declare function f(x: B, type: string): BB

现在,如果您要根据 type 参数进行此返回,则可以根据需要将其指定为文字('A' 等)它也会检查这一点。例如:

declare function f(x: A, type: 'A'): AA

关于javascript - 如何根据输入类型定义 flow.js 输出类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48689103/

相关文章:

javascript - React 和 Flowtype - 继承类

javascript - 流类型在看似无关的类型上抛出错误

javascript - 即使在 if 语句中包装后,Flow 仍认为该值为 null

javascript - 调度具有不同签名的函数

javascript - AngularJS "ng-repeat | filter:..."没有按我的预期工作(不显示任何数据)

javascript - 从路由器设置时 Prop 未更新

javascript - 使用 Javascript 和字符串创建 SVG 片段

webstorm - 如何在webstorm中集成 "flow"?

javascript - 在加载页面触发点击事件本身

javascript - 变量可以包含功能开关吗?