typescript - Pinia/TypeScript 从操作中访问 getter — 类型上不存在属性

标签 typescript pinia

我有一家商店。

export const useGameStore = defineStore("game", {
  state: () => gameBaseState,
  getters: {
    foundMarkers(state): Marker[] {
      return state.markers.filter((m) => m.found);
    },
    ...
  },
  actions: {
    closeAll() {...},

    nextMissed() {...},

    previousMissed() {...},

    removeFlashId(id: string) {...},

    guess(pos: Coord) {
      ...

      if (this.foundMarkers.length >= this.toFind) {
        this.setScore();
        this.status = GameStatus.Passed;
      }
    },
  },
});

guess() 操作和所有其他操作中,找不到 getter 值。我明白了...

Property 'foundMarkers' does not exist on type '{ closeAll(): void; nextMissed(): 
void; previousMissed(): void; removeFlashId(id: string): void; flash(text: string, 
type?: string, t?: number): void; loadLevel(levelIndex: any): void; ... 10 more ...; 
guess(pos: Coord): void; } & { ...; } & _StoreWithState<...> & _StoreWithGetters<...> 
& PiniaCustomProperties<...>'.

这基本上是所有操作。看起来它无法推断 getter 的类型(所有代码都运行良好,并且所有 getter 都可以正常访问)。

我错过了什么吗?

到目前为止,我已经确保输入了 foundMarkers getter

foundMarkers(state): Marker[] {
                     ^^^^^^^^

正如其他论坛中所推荐的,但除此之外,我对如何正确格式化它有点迷失。

我还检查了操作本身的格式是否正确(我认为它们是正确的)。

最佳答案

我想我已经解决了。

虽然从这样的答案中可以明显看出:

https://github.com/vuejs/pinia/discussions/1299

You need to type the return:

totalDiscount(): number | undefined {
  return this.subTotal;
},

解决方案是将返回类型添加到 getter,但我并不明显需要键入 EVERY getter 的返回值。肯定是第一个没有类型的 getter 导致所有后续 getter 失败。

我责怪我对 typescript 缺乏理解/陌生。

关于typescript - Pinia/TypeScript 从操作中访问 getter — 类型上不存在属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75755838/

相关文章:

TypeScript 声明特定的 SCSS 模块

json - 使用 Angular http 请求 json 文件时出现 404

angular - RequestOptions 迁移 Angular 5

javascript - Typescript Vue 组件中的 Pinia 存储给出错误 "Property ' testStore' does not exist on type 'CreateComponentPublicInstance' ...."

environment-variables - 带有 Pinia 的 Nuxt 3 中的环境变量

css - 使用范围变量时 ngStyle 绑定(bind)不起作用

typescript - Tsconfig:导入时需要文件扩展名(deno)

vuejs3 - 在 vue devtools 启动之前,Vue3 Pinia 商店不会加载

vue.js - Pinia 数组更改时如何更新多个 Vue 3 组件

javascript - 在 pinia 商店中的状态更改后,vue 组件不会更新