我对typescript还是比较陌生的,我不知道如何在使用Promise的函数中添加类型。
我遵循Typescript的建议,让我的函数Props从UserStateProps
到Promise<UserStateProps>
,但现在抱怨这个Promise<UserStateProps>
缺少必要的属性。
我有这个功能:
const mergeCookiesWithUserState = async (defaultUserState: UserStateProps): Promise<UserStateProps> => {
const newUserState = { ...defaultUserState }
for (const key in newUserState) {
if (Object.getOwnPropertyDescriptor(cookiesName, key)) {
const cookieValue = await getCookieValue(cookiesName[key])
console.log({ cookieValue})
if (cookieValue !== undefined) {
newUserState[key] = cookieValue
}
}
}
return newUserState
}
,我用它来更新React状态。react的用户状态使用UserStateProps来检查状态类型。自从我在mergeCookiesWithUserState
中引入Promise以来,用户状态抱怨它的props:
Type 'Promise<UserStateProps>' is missing the following properties from type 'UserStateProps': numOfSearches, language, adultContentFilter, openInNewTab, isModalOpents(2739)
接口如下:
export interface UserStateProps {
numOfSearches: number
language: number
adultContentFilter: number
openInNewTab: boolean
isModalOpen: boolean
}
export interface UserContextProps {
userState: UserStateProps
setUserState: (userState: Partial<UserStateProps>) => void
}
有谁能帮我弄明白这件事吗?更新:事实证明,问题是我如何编写getCookieValue()
,因此如何处理从它返回的承诺。但是你所有的评论都让我重新回到了正确的轨道上,找到了解决方案。我相信我签名的答案是正确的,是我得到的错误和我的问题的异步性质中最相关的一个。谢谢!
Type 'Promise<UserStateProps>' is missing the following properties from type 'UserStateProps'
这意味着你在代码的某个地方做了:
const example: UserStateProps = mergeCookiesWithUserState()
与此同时,你特别告诉你的函数类型返回Promise<UserStateProps>
,你试图分配给UserStateProps
。
你不能给UserStateProps赋一个promise
承诺是存在的,因为你的函数被标记为async
,它会自动返回一个承诺,它应该返回的值作为承诺的类型,它最终会解析到。
const example: UserStateProps = await mergeCookiesWithUserState()
这是所有你需要修复你的错误,await
关键字将让承诺解决之前赋值给example
。