Ввести свойство в хранилище явно?

Как в магазине Pinia можно явно указать свойство?

      import { defineStore } from 'pinia'

export const useNotifyStore = defineStore('NotifyStore', {
  state: () => ({
    message: '',
    type: '', // only 'warning', 'error', 'success' shall be allowed values -> how can I specify that?
  }),
})

3 ответа

Вы можете объявить тип с приведением машинописного текста as type.

      import { defineStore } from 'pinia'

type messageType = '' | 'warning' | 'error' | 'success';

export const useNotifyStore = defineStore('NotifyStore', {
  state: () => ({
    message: '' as string,
    type: '' as messageType,
  }),
})
      export type RootState = {
  message: string;
  type: string;
};

export const useMainStore = defineStore({
  id: "mainStore",
  state: () =>
    ({
      message: '',
      type: '',
    } as RootState),
// rest of your logic

Из этого руководства: https://dev.to/carlomigueldy/getting-started-with-vue-3-pinia-store-typescript-by-building-a-grocery-list-app-19km

Мой собственный ответ будет выглядеть примерно так

      import { defineStore } from 'pinia'

// define your store interface, you could use type instead
interface NotifyStoreState {
  message: string
  type: 'warning' | 'error' | 'success'
}

export const useNotifyStore = defineStore('NotifyStore', {
  // infer return type of state
  state: (): NotifyStoreState => ({
    message: '',
    type: ''
  }),
})
Другие вопросы по тегам