我的代码实际上工作正常,但我收到一个我不理解的 Typescript 警告。
const dashboardStore = useDashboardStore()
dashboardStore.$subscribe((mutation) => {
// This works OK!
console.log(mutation.payload.id)
})
PhpStorm 在
mutation.payload
上给我一个警告:
TS2339:类型“SubscriptionCallbackMutation”上不存在属性“payload”。
上不存在属性“payload”
它正确地推断回调本身是一个 Pinia
SubscriptionCallback<DashboardState>
.
Pinia 类型将
mutation
参数显示为类型 SubscriptionCallbackMutation<S>
,并将该类型声明为:
export declare type SubscriptionCallbackMutation<S> = SubscriptionCallbackMutationDirect | SubscriptionCallbackMutationPatchObject<S> | SubscriptionCallbackMutationPatchFunction;
当然类型
SubscriptionCallbackMutationPatchObject
有我需要的patch
属性。
所以如果我显式输入回调参数...
dashboardStore.$subscribe((mutation: SubscriptionCallbackMutation<DashboardState>) => {
// No errors or warnings
const typedMutation = mutation as SubscriptionCallbackMutationPatchObject<AccountUser>
console.log(mutation.payload.id)
}
但我不能将
mutation
参数指定为 SubscriptionCallbackMutationPatchObject<AccountUser>
这让我很困惑。
有人明白为什么吗?以及如何在不重新打字的情况下完成此操作?