TypeScript中void返回值的两种写法为何表现不同?
为什么两种void返回类型的写法结果不一样?
下面这段TypeScript代码可以正常运行:
type voidReturn = (myparam: string) => void; let voidFunction: voidReturn; voidFunction = (myparam) => myparam.length;
但下面这段代码却会直接报错:
function voidReturnError(myparam: string): void { return myparam.length; // Error: Type 'number' is not assignable to type 'void'. }
这两种写法看起来类似,实际结果不同的核心原因是TypeScript对两种场景的类型校验逻辑有区别:
直接给函数声明void返回值时:TypeScript会做严格的类型校验,要求函数体不能返回任何有实际意义的值——要么不写return语句,要么只返回undefined。所以返回number类型的
myparam.length会直接触发类型不匹配错误,目的是保证函数行为和声明的返回类型完全一致。将函数赋值给标注为void返回类型的变量时:TypeScript会启用「返回值忽略」规则。它清楚这个函数实际有返回值,但因为你声明了变量的类型是返回void,就默认你不会去使用这个返回值,因此允许这种赋值操作。本质是允许你“丢弃”函数的返回值,而非改变函数本身的返回类型。
举个例子,如果你尝试使用这个变量的返回值:
const result = voidFunction("hello");
此时result的类型会被推断为void,哪怕函数实际返回了数字,你也无法正常使用这个返回值——TypeScript直接屏蔽了它。
内容的提问来源于stack exchange,提问作者stratis
相关产品推荐
相关产品推荐

