recherche

Maison  >  Questions et réponses  >  le corps du texte

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é ?

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粉252116587P粉252116587486 Il y a quelques jours786

répondre à tous(1)je répondrai

  • P粉864872812

    P粉8648728122023-09-17 00:42:18

    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)

    répondre
    0
  • Annulerrépondre