使用联合类型键入推断 - 不存在最佳常见类型

时间:2016-04-07 14:48:52

标签: typescript

所以,我正在使用TypeScript中的类型推断。我将提供两个在调用时产生相同结果的示例,但是在其中一个示例中,TypeScript无法推断出由于"没有最常见的类型而导致的类型"。

使用三元运算符的示例

function foo(a: boolean) {
    return a ? 4 : true;
}

编译器推断foo是(a: boolean) => number | boolean,这很棒。

使用if语句

的示例
function foo(a: boolean) {
    if (a) {
        return 4;
    } else {
        return true;
    }
}

编译器抱怨"没有最好的常见类型"当试图推断返回类型。令我困惑的是,如果陈述应该混淆类型推断。怎么样?

1 个答案:

答案 0 :(得分:1)

当函数中的return语句没有公共类型时,将抛出该错误。只有存在多个return语句时才会发生这种情况。

第一个例子 - 一个返回语句

在第一个示例中,只有一个return语句返回一个类型为number | boolean的值(添加括号以强调这是一个表达式):

return (a ? 4 : true); // return number | boolean

没关系。该类型不需要与其他返回语句共同使用。

第二个示例 - 多个返回语句

第二个例子有多个return语句......

if (a) {
    return 4; // return number
} else {
    return true; // return boolean
}

...并且多个语句之间不存在共同类型。所以它错了。

包含多个退货声明的解决方案

当return语句之间不存在常见类型时,您需要明确,以便让编译器知道您的意思:

function foo(a: boolean): number | boolean {
    if (a) {
        return 4;
    } else {
        return true;
    }
}

相关:请参阅"Best Common Type"