本文详解 react hook form + typescript 下 `onsubmit` 函数触发 eslint `no-misused-promises` 报错的原因及正确修复方式,重点说明为何需显式返回 promise 以及如何保持类型安全与逻辑简洁。
在使用 React Hook Form 的 handleSubmit 时,其内部会对传入的 onSubmit 回调进行类型校验。SubmitHandler
根本原因在于:SubmitHandler
(data: T, event?: React.BaseSyntheticEvent) => void | Promise
因此,即使你的逻辑完全同步,也必须显式满足该联合类型。最稳妥、零歧义的做法是让 onSubmit 显式返回 Promise
✅ 正确写法(推荐):
const onSubmit: SubmitHandler= (data, event) => { event?.preventDefault(); const { searchQuery } = data; dispatch(setSearchQuery(searchQuery)); return Promise.resolve(); // ✅ 明确返回 Promise };
或如答案中所示,使用构造器(语义更清晰):
const onSubmit: SubmitHandler= (data, event) => { return new Promise ((resolve) => { event?.preventDefault(); const { searchQuery } = data; dispatch(setSearchQuery(searchQuery)); resolve(); // ✅ 同步操作后立即 resolve }); };
⚠️ 注意事项:

const onSubmit: SubmitHandler= async (data) => { const { searchQuery } = data; dispatch(setSearchQuery(searchQuery)); await api.search(searchQuery); // ✅ 自动返回 Promise };
总结:该错误本质是 TypeScript 类型系统与 ESLint 规则对“可承诺行为”的严格校验。只需确保 onSubmit 显式返回 Promise