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 缺乏理解/不熟悉。
