gpt4 book ai didi

typescript - 为什么 typescript 在使用区分类型检查时无法推断返回类型

转载 作者:行者123 更新时间:2023-12-05 08:38:16 24 4
gpt4 key购买 nike

我想了解为什么 TypeScript 无法推断以下函数的返回类型(虽然它能够在 if-else 语句中区分):

function calc (arg: number|string) {
if (typeof arg === 'number') {
// here typescript knows arg is number type
return arg
} else if (typeof arg === 'string') {
// here typescript knows arg is string type
return arg
}
}

// infers test to be number|string|undefined
const test = calc(10)

当我们编写以下函数时:

function calc (arg: number|string) {
return String(arg)
}

// infers test to be string
const test = calc(10)

那么它当然可以推断出返回类型。但是它为什么不能推断出第一个函数的返回类型,而它确实在不同的分支中提供了类型安全并且它知道它得到一个数字类型作为 arg?

编辑

我知道怎么解决,但我很想明白为什么 TypeScript 做不到?

最佳答案

function calc (arg: number): number;
function calc (arg: string): string;
function calc (arg: number|string) {
if (typeof arg === 'number') {
// here typescript knows arg is number type
return route
} else if (typeof arg === 'string') {
// here typescript knows arg is string type
return route
}
}

您可以通过重载原始函数定义来指定特定参数类型的返回值。

另请参阅:https://www.typescriptlang.org/docs/handbook/functions.html#overloads

关于typescript - 为什么 typescript 在使用区分类型检查时无法推断返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63637515/

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