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

时间:2018-02-08 15:29:59

标签: javascript flowtype

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

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;

但它似乎无法正常工作

有办法吗?

1 个答案:

答案 0 :(得分:1)

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

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