类型“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
. 要解决该错误,请确保在赋值之前从函数返回正确类型的值。