TypeScript useProject Hook类型不匹配报错:异步函数类型不符
错误本质
你遇到的类型不匹配问题,核心是同步函数类型定义和异步函数实现的冲突:
- 你在
useProjectFunctions.d.ts里定义的GetImageUploadToken是个同步函数类型,要求直接返回{ status: 'success'; tokenId: string; }对象; - 但
useProjectFunctions.ts里的getImageUploadToken是async函数,所有async函数的返回值都会被自动包装成Promise,所以实际函数的类型是(params) => Promise<{ status: 'success'; tokenId: string; }>; - TypeScript发现你把一个返回Promise的函数赋值给了要求返回普通对象的类型,就抛出了错误——错误信息里说“Promise缺少status、tokenId属性”,本质是它期望拿到直接的结果对象,而不是一个Promise包裹的对象。
修复方案
1. 更新类型定义,匹配异步行为
修改useProjectFunctions.d.ts中的GetImageUploadToken类型,让它返回Promise:
export declare type GetImageUploadToken = ({ ...params }: { organisationId: string, projectId: string, imageName: string, isAdminRequest?: boolean, }) => Promise<{ status: 'success'; tokenId: string; }>
2. 调用异步函数时使用await
因为现在getImageUploadToken是异步函数,在addImage里调用它必须用await才能拿到实际的结果对象:
async function addImage({ getImageUploadToken }: { getImageUploadToken: GetImageUploadToken; }) { const tokenCallResponse = await getImageUploadToken({ organisationId: 'orgId1', projectId: 'projId1', imageName: 'fileName', isAdminRequest: false }); }
做完这两步,TypeScript的类型错误就会完全消失。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

