Facebook流量函数联盟类型

时间:2015-07-01 17:34:02

标签: javascript types static-analysis flowtype typechecking

我正在玩Facebook Flow并且想知道,为什么以下功能没有打字?它显然使用了由' |'表示的联合类型。

declare var f: ((x: any) => number) | ((x: any) => string);    
function f(x) {
    if(true) {
        return 5;
    }
    else return 'hello';
}

检查员抱怨:

function
This type is incompatible with
union type

我知道它可以在我注释时起作用:

declare var f: (x: any) => number|string;

但为什么前一个注释会失败?坦率地说,到目前为止,我还没有看到函数类型的联合类型,但是,我没有看到理论上的原因,为什么它不应该被允许。

1 个答案:

答案 0 :(得分:1)

((x: any) => number) | ((x: any) => string)是一个有效的表达式。这意味着f可以是这两个功能签名之一。例如

f = function(x: any): number {return 0}将有效

f = function(x: any): string {return 'hello'}也可以使用

(x: any) => number|string表示同一函数的返回值可以是动态的其中一种类型,就是这种情况。