MutationやActionは「お店のメニュー」みたいなもの。
いちいち「チャーシューラーメンください!」と手書きで注文すると間違う。
→ 「メニュー番号3番ください!」と番号で統一するほうがミスが減る。
それが
MutationTypes.Increment
みたいな書き方。
store/types.ts
// mutationの名前一覧(リテラル型として定義)
export const MutationTypes = {
Increment: 'increment',
SetUserName: 'setUserName'
} as const;
// actionの名前一覧
export const ActionTypes = {
UpdateUserName: 'updateUserName'
} as const;
// getterの名前一覧
export const GetterTypes = {
UserInfo: 'userInfo'
} as const;
🟢 as const
を付けると
→ "increment"
という 固定の文字列型 になる(string型じゃなくて "increment"
型)。
// それぞれのキー一覧の型を作る
export type MutationType = typeof MutationTypes[keyof typeof MutationTypes];
export type ActionType = typeof ActionTypes[keyof typeof ActionTypes];
export type GetterType = typeof GetterTypes[keyof typeof GetterTypes];
✅ これで MutationType
は "increment" | "setUserName"
という型になる。