Maison > Questions et réponses > le corps du texte
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粉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>[]; };