声明类型既不是 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); };
我们将函数的返回类型设置getPromise
为Promise<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)的函数返回一个值。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: