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 => ({

    }),
    ...