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 }
Vous pouvez utiliser le type de mappage pour cela et
排除
:(Démo en ligne)