TypeScript疑问:已声明返回void为何仍报函数必须返回值错误
问题分析与解决
你犯了一个类型标注的错误:CommandHandler是一个函数类型,它描述的是「接收CommandValues参数、返回void或Promise<void>的函数」,但你把handler的返回类型标注成了CommandHandler,这相当于要求handler执行后要返回另一个符合CommandHandler类型的函数——可你的函数体里只是执行了console.log,根本没返回任何函数,所以编译器才会报错。
正确的写法有两种:
写法一:直接指定handler的类型为CommandHandler
export const handler: CommandHandler = (values: CommandValues) => { console.log(`hello ${values.name}`); };
写法二:直接标注函数的返回值类型(对应CommandHandler的返回值约束)
export const handler = (values: CommandValues): void | Promise<void> => { console.log(`hello ${values.name}`); };
如果确实需要handler返回一个CommandHandler类型的函数(这应该不是你的需求)
那函数体里必须返回符合该类型的函数,比如:
export const handler = (values: CommandValues): CommandHandler => { // 返回一个符合CommandHandler类型的函数 return (innerValues) => { console.log(`hello ${innerValues.name}`); }; };
内容的提问来源于stack exchange,提问作者kejedi
相关产品推荐
相关产品推荐

