即使在类型注释函数返回之后,以下匿名函数在返回数字时也会被 TS 忽略
const doSomething: () => void = () => {
console.log("Hello World");
return 5;
};
doSomething()
在屏幕截图中,观察没有发现红色波浪线错误 提示还显示
doSomething
返回 void ,即使它返回一个数字
通常(据我所知)该函数返回一个数字类型,但我已注释为 void,所以我希望它会抛出错误。为什么不是这样?
注意:输出为
Hello
5
我的猜测是箭头函数的行为很特殊,在某种程度上
() => ()
返回带有隐式返回的表达式(值)() => { return 0 }
有利于显式返回,(使用“return”关键字)后者的行为,其中使用箭头函数内的“return”语句显式返回值会覆盖 TS 中的类型检查。
这是一个公平的评估吗,因为我想不出一个逻辑答案来解释这段代码为何有效。
void
并不意味着该函数不返回任何内容,而是意味着该函数的返回值没有意义,不应该使用。因此,即使您将 doSomething
常量键入为 () => void
,也可以为其分配 () => number
函数(或返回其他任何内容的函数)。如果您想强制只能将函数分配给返回undefined
的常量(如果没有明确的return ___
语句,则函数在调用时会返回该常量),您可以使用() => undefined
。
如果您使用函数声明而不是对常量赋值,TypeScript 也会抱怨:
function doSomething(): void {
console.log("Hello World");
return 5;
}
它在那里抱怨,因为它在那里应用了更严格的检查,而不是将函数分配给函数类型变量(和常量)。