我是TypeScript的新手,试图了解如何使用强制转换。我正在使用API,该API定义了类似于以下内容的功能:
function foo(a: number): number | undefined;
我想对该数字的返回值执行函数以始终安全地将其转换为数字,但是出现错误:
function myFunc(bar: number | undefined): number {
if (typeof bar === undefined) {
return 0;
} else {
return bar; // error ts(2322)
}
}
ts(2322)
扩展到Type 'number | undefined' is not assignable to type 'number'.
Type 'undefined' is not assignable to type 'number'.
的地方
我觉得这是应该在编译时确定的。显然,我们仅在typeof bar === number
的情况下进入else,但在以下代码段中尝试进行此操作:
function myFunc(bar: number | undefined): number {
if (typeof bar === number) { // error ts(2367)
return bar;
} else {
return 0;
}
}
错误消息为This condition will always return 'false' since the types '"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"' and 'Requireable<number>' have no overlap.
在这一点上,我对TypeScript中的强制转换还很迷茫。有没有办法实现我的目标?任何帮助将不胜感激。
答案 0 :(得分:3)
if (typeof bar === undefined) {
typeof operator产生一个字符串,因此您真正应该测试的是:
if (typeof bar === "undefined") {
如您所知,if
的情况永远不会成立,因此代码始终进入else
块。因此,Typescript推断出bar
仍未定义时可以到达return语句,这与您说要返回的类型冲突。
答案 1 :(得分:0)
尼古拉斯(Nicholas)提供了详细的解释,但您当然可以简单地实现以下功能:
function myFunc(bar: number | undefined): number {
return bar || 0;
}