类型“void”不可分配给 TypeScript 中的类型

类型“void”不可分配给 TypeScript 中的类型

Type ‘void’ is not assignable to type in TypeScript

“Type ‘void’ is not assignable to type” TypeScript 错误发生在我们忘记从函数返回值时,因此该函数获得隐式返回类型void. 要解决该错误,请确保在赋值之前从函数返回正确类型的值。

下面是错误如何发生的示例。

索引.ts
// 👇️ const sum: (a: number, b: number) => void const sum = (a: number, b: number) => { const result = a + b; // 👉️ function doesn't return anything }; // Error: ⛔️ Type 'void' is not // assignable to type 'number'.ts(2322) const num: number = sum(50, 50);

我们忘记了从函数返回一个值sum,所以它隐式地有一个返回类型
void

void类型表示不返回值的函数的返回值。

当您不从函数返回值时,您隐式返回undefined
并且函数的返回类型被推断为
void.

错误消息“Type ‘void’ is not assignable to type ‘number’”意味着我们有一个值需要类型赋值,number我们正在尝试为其分配一个类型值void

要解决该错误,请确保从您的函数返回一个值。

索引.ts
const sum = (a: number, b: number) => { const result = a + b; return result; // 👈️ explicitly return }; const num: number = sum(50, 50); console.log(num); // 👉️ 100

现在该sum函数的返回类型为number

请注意,函数的返回类型必须与num变量的类型兼容。

一种有用的调试方法是显式设置函数的返回类型。

索引.ts
// ⛔️ Error: A function whose declared type // is neither 'void' nor 'any' must return a value.ts(2355) const sum = (a: number, b: number): number => { const result = a + b; };

我们显式地将函数的返回类型设置为number但忘记返回一个值,因此 TypeScript 通知我们必须从函数返回一个值。

如果箭头函数中有隐式返回,请确保该函数返回预期值。

索引.ts
// 👇️ implicit return with objects const getObj = () => ({ name: 'Tom', country: 'Chile', }); // 👇️ implicit return with primitives const getNum = (a: number, b: number) => a + b;

使用类方法时也会发生同样的错误。

索引.ts
class DoMath { sum(a: number, b: number) { const result = a + b; } } const m = new DoMath(); // ⛔️ Error: Type 'void' is not // assignable to type 'number'.ts(2322) const num: number = m.sum(10, 15);

解决方案是相同的——确保类方法返回预期类型的​​值。

您可能还会使用期望您返回特定类型值的回调函数。将鼠标悬停在该函数上并确保返回正确类型的值。

有时您有复杂的函数,其中包含许多条件和不同的代码路径。请注意,所有函数的代码路径都必须返回一个值。

结论#

“Type ‘void’ is not assignable to type” TypeScript 错误发生在我们忘记从函数返回值时,因此该函数获得隐式返回类型void. 要解决该错误,请确保在赋值之前从函数返回正确类型的值。