gpt4 book ai didi

typescript - 联合类型的类型推断——不存在最佳通用类型

转载 作者:搜寻专家 更新时间:2023-10-30 20:41:13 25 4
gpt4 key购买 nike

所以,我正在玩 TypeScript 中的类型推断。我将提供两个示例,它们在调用时会产生相同的结果,但是在其中一个示例中,由于“没有最佳通用类型”,TypeScript 无法推断类型。

三元运算符示例

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

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

if 语句示例

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

编译器在尝试推断返回类型时提示“没有最佳通用类型”。令我困惑的是 if 语句应该与类型推断混淆。怎么会?

最佳答案

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

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

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

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

没关系。没有其他需要与该类型相同的返回语句。

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

第二个例子有多个返回语句...

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

...并且多个语句之间不存在公共(public)类型。所以它出错了。

具有多个 return 语句的解决方案

当 return 语句之间不存在公共(public)类型时,您需要显式地让编译器知道您要这样做:

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

相关:参见"Best Common Type"

关于typescript - 联合类型的类型推断——不存在最佳通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36479746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com