所以,我正在使用TypeScript中的类型推断.我将提供两个在调用时产生相同结果的示例,但是在其中一个示例中,由于"没有最佳常见类型",TypeScript无法推断出类型.
三元运算符的示例
function foo(a: boolean) {
return a ? 4 : true;
}
Run Code Online (Sandbox Code Playgroud)
编译器推断出foo (a: boolean) => number | boolean
非常棒.
if语句的示例
function foo(a: boolean) {
if (a) {
return 4;
} else {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
在尝试推断返回类型时,编译器会抱怨"没有最佳常见类型".令我困惑的是,如果陈述应该混淆类型推断.怎么会?
当函数中的 return 语句不具有公共类型时,将会抛出该错误。仅当存在多个 return 语句时才会发生这种情况。
第一个示例 - 一个 return 语句
在第一个示例中,只有一个 return 语句返回键入的值number | boolean
(添加括号以强调这是一个表达式):
return (a ? 4 : true); // return number | boolean
Run Code Online (Sandbox Code Playgroud)
没关系。该类型不需要与其他返回语句相同。
第二个示例 - 多个 return 语句
第二个示例有多个 return 语句...
if (a) {
return 4; // return number
} else {
return true; // return boolean
}
Run Code Online (Sandbox Code Playgroud)
...并且多个语句之间不存在公共类型。所以会出错。
具有多个 return 语句的解决方案
当 return 语句之间不存在公共类型时,您需要显式地让编译器知道您的意思是这样做:
function foo(a: boolean): number | boolean {
if (a) {
return 4;
} else {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
相关:参见“最佳常见类型”
归档时间: |
|
查看次数: |
248 次 |
最近记录: |