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

Javascript 如何根据输入类型定义flow.js输出类型,javascript,flowtype,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"}

我是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;
类型C=typeof(T)==“A”?AA:BB;
但它似乎不起作用


有什么方法可以做到这一点吗?

这就是您希望函数有多个声明的地方

现在,如果要基于
type
参数进行此返回,如果需要,可以将其指定为文本(
'a'
,等等),并且它也会检查。例如:

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

这就是您希望函数有多个声明的地方

现在,如果要基于
type
参数进行此返回,如果需要,可以将其指定为文本(
'a'
,等等),并且它也会检查。例如:

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

好的,谢谢,我会调查的。我刚刚尝试在您的代码段中添加实际的实现(带有类型),但我无法使用箭头函数使其正常工作,有办法吗?我可以使用常规(/old)语法,但我更喜欢使用Arrowsher的一个问题,详细说明了为什么箭头函数在此时无法工作:好的,谢谢,我将对此进行研究。我刚刚尝试在您的代码段中添加实际的实现(带有类型),但我无法使用箭头函数使其正常工作,有办法吗?我可以使用常规(/old)语法,但我更喜欢使用Arrowsher的一个问题,详细说明了为什么箭头函数此时无法工作: