【发布时间】:2020-12-17 14:35:34
【问题描述】:
我想了解为什么 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不能解决?
【问题讨论】:
-
使用重载签名
-
因为
calc的第一个实现的推断类型是(arg: number | string) => number | string | undefined,它不会神奇地推断出重载或泛型。 -
您在示例中返回的
route是什么? -
@paroxyzm 错误 -> 忘记更改为 arg
标签: typescript