声明类型既不是 void 也不是 any (TS) 的函数

声明类型既不是 void 也不是 any (TS) 的函数

A function whose declared type is neither void nor any (TS)

“A function whose declared type is neither void nor any must return a value”错误发生在我们显式设置函数的返回类型但函数不返回值时。

要解决该错误,请确保从函数返回一个值或删除返回类型。

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

索引.ts
// ⛔️ Error: A function whose declared type is // neither 'void' nor 'any' must return a value.ts(2355) const getPromise = (): Promise<number> => { Promise.resolve(42); };

我们将函数的返回类型设置getPromisePromise<number>,但我们不从函数返回值。

如果您不从函数返回值,该函数将隐式返回 undefined

返回匹配指定类型的值

要解决该错误,请返回一个与函数的返回类型相匹配的值。

索引.ts
const getPromise = (): Promise<number> => { return Promise.resolve(42); };

如果你的函数不需要返回任何东西,你可以简单地删除函数的返回类型。

索引.ts
// 👇️ const getPromise: () => void const getPromise = () => { Promise.resolve(42); };

现在该函数的返回类型为
void,表示不返回值的函数的返回类型。

处理具有嵌套条件的复杂函数

有时当你有一个带有嵌套条件和回调的复杂函数时,你可能会遇到这个错误。

索引.ts
// ⛔️ Error: A function whose declared type is // neither 'void' nor 'any' must return a value.ts(2355) const getNumber = (): number => { function inner() { if (Math.random()) { return 100; } return 200; } inner(); };

发生错误是因为我们
将函数的返回类型设置number,但函数没有返回值。

inner函数返回一个值,但是getNumber没有。

在使用回调函数时,这通常是混淆的根源。从嵌套函数返回值并不意味着您从外部函数返回值。

示例中的函数inner()返回一个数字,但如果要从number外部函数返回,请使用
显式 return 语句

索引.ts
// ✅ OK now const getNumber = (): number => { function inner() { if (Math.random()) { return 100; } return 200; } return inner(); };

现在我们明确地返回函数的返回值inner

我们必须这样做,因为您只为您在其范围内使用该return语句(或隐式箭头函数 return)的函数返回一个值。

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: