所以,我正在使用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;
}
}
编译器抱怨"没有最好的常见类型"当试图推断返回类型。令我困惑的是,如果陈述应该混淆类型推断。怎么样?
答案 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"