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

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

我有一家商店。

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[] {
                     ^^^^^^^^

按照其他论坛的建议,但除此之外,我对如何正确格式化它有点迷失。

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

typescript pinia
1个回答
4
投票

答案: 确保每个 getter 都有一个返回类型,否则解析器将无法找到它们中的任何一个。

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

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

您需要输入回车:

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

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

我责怪我对打字稿缺乏理解/陌生。

© www.soinside.com 2019 - 2024. All rights reserved.