我正在用TypeScript编写一个useProject
钩子,它调用useProjectFunctions.ts
中声明的函数。
在useProject
钩子中,TypeScript抛出一个错误,表明类型不匹配,但我看不出这是怎么回事。
- 使用项目函数. d. ts**
export declare type GetImageUploadToken = ({ ...params }: {
organisationId: string,
projectId: string,
imageName: string,
isAdminRequest?: boolean,
}) => {
status: 'success';
tokenId: string;
}
- 使用项目函数. ts**
export function useProjectFunctions() {
const { functions } = useFirebase();
async function getImageUploadToken({ ...params }: Parameters<GetImageUploadToken>[0]) {
const response = httpsCallable<any, ReturnType<GetImageUploadToken>>(functions, ProjectFunctions.GET_IMAGE_UPLOAD_TOKEN);
return (await response({ ...params })).data;
};
return {
getImageUploadToken
};
}
- 使用项目. ts**
export function useProject() {
const { getImageUploadToken } = useProjectFunctions();
return {
addImage: () => addImage({ getImageUploadToken })
};
}
async function addImage({ getImageUploadToken }: {
getImageUploadToken: GetImageUploadToken;
}) {
const tokenCallResponse = getImageUploadToken({
organisationId: 'orgId1',
projectId: 'projId1',
imageName: 'fileName',
isAdminRequest: false
});
}
在useProject.ts
中,TS在addImage: () => addImage({ getImageUploadToken })
行上生成以下错误:
类型'({...参数}:{组织ID:字符串;项目ID:字符串;图像名称:字符串;是否为管理请求?:布尔值;})=〉承诺〈{状态:"成功";令牌ID:字符串;}〉"不能赋给类型" GetImageUploadToken "。
类型"承诺〈{状态:"成功";令牌ID:string ;}〉"缺少类型" {status:"成功";令牌ID:字符串;}":状态,令牌ID
所需类型来自属性"getImageUploadToken",该属性在此处对类型"{project:私有项目接口;设置项目:调度;文件:文件;admin?:布尔型;获取图像上传令牌:获取图像上传令牌;存储:Firebase存储;}' }'
这个错误到底是什么意思,我该如何修复它?
1条答案
按热度按时间e3bfsja21#
您的类型GetImageUploadToken是一个对象,而getImageUploadToken返回的类型是一个在完成时解析为GetImageUploadToken的承诺。
要修复此问题,可以在addImage中更改getImageUploadToken的类型:获取图像上传令牌以获取图像上传令牌:承诺
这将告诉typescript您正在向addImage传递一个异步函数
然后,您需要等待异步getImageUploadToken函数,因此将函数调用更改为常量tokenCallResponse = await getImageUploadToken({
如果您仍然不确定,我建议您阅读一下异步函数和javascript中的承诺