网站搜索

Pinia/TypeScript 从 action 访问 getters — 属性在类型上不存在


我有一家商店。

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<...>'.

基本上就是所有的操作。看起来它不能推断出 getters 的类型(所有代码都能正常运行,而且所有 getters 都能正常访问)。

我错过什么了吗?

到目前为止,我已经确保 foundMarkers getter 的类型是正确的

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

正如在其他论坛中推荐的那样,但除此之外,我有点不清楚如何正确格式化这个。

我也检查了这些动作本身的格式是否正确(我认为它们是正确的)。

答案#1

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

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

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

你需要输入回车:

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

解决办法是给 getter 添加返回类型,一开始并不明显我需要为每个 getter 指定返回类型。肯定是第一个没有类型的 getter 导致后续所有 getter 都失败了。

我怪自己对 TypeScript 缺乏理解/不熟悉。

相关文章