为何我的TypeScript函数隐式返回类型缺少void?
为什么该TypeScript函数的隐式返回类型是
number而非number | void? 先看你给出的函数代码:
function foo(check: boolean){ if(check){ return 123; } }
这是TypeScript类型推断规则导致的结果:
- 当函数存在至少一个显式返回具体类型值的分支(比如这里
return 123对应number类型),而其他分支没有显式返回值时,编译器会优先将函数的隐式返回类型推断为那个明确的返回类型(number),不会自动把void加入联合类型。 - 从语义上来说,TypeScript里的
void更偏向于表达“函数设计为不返回值”,而非“可能返回undefined”。当有明确返回值分支存在时,编译器认为函数的核心用途是返回该类型的值,无返回值的分支属于无需关注返回结果的场景,因此不会推断出number | void。
如果想要让返回类型变成number | void(或者更准确的number | undefined,因为无返回值分支实际返回undefined),可以这么做:
- 显式指定函数返回类型:
function foo(check: boolean): number | void { if(check){ return 123; } } - 在无返回值分支显式返回
undefined,此时编译器会推断为number | undefined(和number | void在函数返回场景下基本等价):function foo(check: boolean){ if(check){ return 123; } return undefined; }
内容的提问来源于stack exchange,提问作者wlf
相关产品推荐
相关产品推荐

