Appearance
函数的可分配性
返回 void 类型
函数的 void 返回类型可以产生一些不寻常的,但却是预期的行为。
返回类型为 void 的上下文类型并不强迫函数不返回东西。另一种说法是,一个具有 void 返回类型的上下文函数类型( type vf = () => void ),在实现时,可以返回任何其他的值,但它会被忽略。
因此,以下 ()=> void 类型的实现是有效的:
typescript
type voidFunc = () => void
const f1: voidFunc = () => {
return true
}
const f2: voidFunc = () => true
const f3: voidFunc = function () {
return true
}
而当这些函数之一的返回值被分配给另一个变量时,它将保留 void 的类型:
typescript
const v1 = f1();
const v2 = f2();
const v3 = f3();
这种行为的存在使得下面的代码是有效的,即使 Array.prototype.push 返回一个数字,而Array.prototype.forEach 方法期望一个返回类型为 void 的函数:
typescript
const src = [1, 2, 3];
const dst = [0];
src.forEach((el) => dst.push(el));
还有一个需要注意的特殊情况,当一个字面的函数定义有一个 void 的返回类型时,该函数必须不返回任何东西。
typescript
function f2(): void {
return true;
}
const f3 = function (): void {
return true;
};