Limiter les valeurs du tableau dans un enregistrement générique pour qu'elles ne contiennent pas la même valeur que la clé à laquelle il est affecté ?
P粉252116587
P粉252116587 2023-09-16 14:13:52
0
1
770

J'implémente une machine à états simple. La configuration est la suivante :

type StateMachineConfig<State extends string, TransitionState extends State> = Record<State, TransitionState[]>;

Chaque clé doit être une énumération de chaîne.

Chaque valeur doit être un tableau de la même énumération de chaînes, mais l'état donné comme clé ne doit pas être inclus dans le tableau

Considérant ainsi le statut suivant :

enum MyStates {
    State1 = "State 1",
    State2 = "State 2",
    State3 = "State 3"
}

...ce qui suit devrait fonctionner :

const config: StateMachineConfig<MyStates, MyStates> = {
    [MyStates.State1]: [MyStates.State2],
    [MyStates.State2]: [MyStates.State3],
    [MyStates.State3]: [MyStates.State1, MyStates.State2]
}

...mais pas les suivants :

const config: StateMachineConfig<MyStates, MyStates> = {
    [MyStates.State1]: [MyStates.State2],
    [MyStates.State2]: [MyStates.State3],
    [MyStates.State3]: [MyStates.State2, MyStates.State3] // error: value in array is same as key
}

P粉252116587
P粉252116587

répondre à tous(1)
P粉864872812

Vous pouvez utiliser le type de mappage pour cela et 排除 : 

type StateMachineConfig<State extends string, TransitionState extends State> = {
  [state in State]: Exclude<TransitionState, state>[];
};

(Démo en ligne)

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal