reactjs - Typescript-ordlista med dynamiska nycklar


Ny på TypeScript och har svårt att beskriva en ordbok.

I huvudsak exporterar jag flera butiker (exemplet nedan är medvetet reducerat), som jag matar till en Registry-klass.

Idealiskt sett skulle stores dictionary-typen jag vill ha vara dynamisk på ett sätt så att jag kan exportera så många butiker jag vill, men när jag försöker använda registret i min komponent och försöker komma åt något som inte finns i stores dict, kommer TS att klaga och IDE:n kommer att upptäcka det.

All form av TS-trolleri kommer att uppskattas mycket

butiker.ts

import UserStore from './user.ts';
import ListStore from './list.ts';
export {
   UserStore, ListStore
};

register.ts

export default class Registry{

    stores = {};

    constructor(stores: any){
        Object.keys(stores).forEach((name: string) => {
            const cls = stores[name];
            this.stores[name] = new cls(this);
        });
    }

UPPDATERING baserat på svaret som ges nedan. Jag ändrade registret till detta. Alla butiker härstammar från BaseStore. Dock får jag inte TypeScript att klaga när jag försöker komma åt en icke-existerande butik

export default class Registry{

    stores: { [name: string]: BaseStore } = {};


    constructor(stores: any){
        Object.keys(stores).forEach((name: string) => {
            const cls = stores[name];
            if(cls){
                this.stores[name] = new cls(this);
            }
        });

Svar #1

type storeType = {
    [key: string]: any // instead of any you can put any type you want...
}

nu kan stores ha detta:

const stores = {
    'userStore': 'anything',
    'listStore': 'anything'
}

console.log(stores.userStore) // will accept the type

Relaterade artiklar