typescript - Definirajte pinia stanje na temelju sučelja bez ponovnog ručnog stvaranja svake vlasnosti
Pokušavam implementirati upravljanje stanjem (pinia) u SPA. Koristimo TypeScript i zanima me postoji li način da se definira stanje temeljeno na sučelju (interface) bez potrebe da se svaki pojedinačni atribut u stanju ponovno tipizira. U osnovi, reći stanju da je temeljeno na sučelju i da se inicijalizira s pravom strukturom.
Mogu definirati stanje da slijedi određenu strukturu sučelja koristeći defineStore<string, MyInterface> (što je već veliki uspjeh), ali se pitam je li moguće slijediti koncept spread operatora kako bi se izbjeglo tipkanje svih svojstava sučelja u deklaraciji stanja.
konceptualni primjer
interface ICustomer {
id: number;
name: string;
// up to 100 more properties and in some cases, nested objects based on other interfaces
}
export const useCustomersStore = defineStore<string, ICustomer>('customers', {
state: () => ({
...ICustomer,
}),
...
Imamo prilično velike sučelja (mislim na 50-100 svojstava u svakom) i ako moramo ponovno unositi svako svojstvo u stanje, to može postati pomalo opširno. Pretpostavljam da je glavni problem u tome što stanje treba zadanu vrijednost za inicijalizaciju, ali ako moramo ponovno unositi sva svojstva, stvari će postati pomalo neuredne. Također, nije baš budućnost-podesno ako moramo pamtiti mijenjati svojstva stanja kada mijenjamo sučelja. Naši API-jevi uvijek točno odgovaraju strukturi sučelja, pa koristimo axios specificirajući sučelje pri svakom pozivu.
Hvala
Odgovor #1
Možete to učiniti:
interface ICustomer {
id: number;
name: string;
// up to 100 more properties and in some cases, nested objects based on other interfaces
}
export const useCustomersStore = defineStore('customers', {
state: (): ICustomer => ({
}),
...
