TypeScript字面量函数void返回类型疑问及文档准确性困惑
TypeScript中void返回类型函数的报错疑问解答
首先看TypeScript文档「函数的可赋值性」章节的描述(翻译自官方英文文档):
当字面量函数的返回类型被定义为
void时,该函数不应返回任何值。
但你给出的两个函数都会报错,这是因为文档的表述场景和你写的代码场景并不一致,并非文档存在错误:
你的代码场景:直接定义返回void的函数
无论是函数声明还是函数表达式赋值,只要显式指定返回类型为void,却返回了true这类非undefined的值,TypeScript都会触发类型错误——这是基础的类型校验规则,和是否是字面量函数无关:
// 函数声明:显式返回void却返回true,报错 function f2(): void { return true; }
// 函数表达式赋值:显式返回void却返回true,报错 const f3 = function (): void { return true; };
文档实际讨论的场景:函数的赋值兼容性
文档里说的「字面量函数返回void」的例外情况,指的是将有返回值的函数赋值给类型为() => void的变量/参数的场景,比如:
// 有返回值的函数 const fnWithReturn = () => true; // 赋值给类型为() => void的变量,不会报错 const fnVoid: () => void = fnWithReturn;
这种情况下,TypeScript允许赋值,因为当一个函数被当作void返回类型使用时,它的返回值会被忽略,这才是文档描述的核心场景。
简单来说:直接定义返回void的函数必须遵守返回值规则,而把有返回值的函数赋值给void类型的函数变量时,才会触发文档里提到的兼容性规则。
内容的提问来源于stack exchange,提问作者DoHan_Kim
相关产品推荐
相关产品推荐

