Pinia $subscribe 回调“mutation.payload”属性在 PhpStorm 中给出 Typescript 警告

问题描述 投票:0回答:0

我的代码实际上工作正常,但我收到一个我不理解的 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>
这让我很困惑。

有人明白为什么吗?以及如何在不重新打字的情况下完成此操作?

typescript vue.js phpstorm pinia
© www.soinside.com 2019 - 2024. All rights reserved.