Skip to content

函数的可分配性

返回 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; 
};