Array-Werte in einem generischen Datensatz so begrenzen, dass sie nicht denselben Wert enthalten wie der Schlüssel, dem er zugewiesen ist?
P粉252116587
P粉252116587 2023-09-16 14:13:52
0
1
780

Ich implementieren eine einfache Zustandsmaschine. Die Konfiguration ist wie folgt:

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

Jeder Schlüssel sollte eine String-Aufzählung sein.

Jeder Wert sollte ein Array derselben Zeichenfolgenaufzählung sein, aber der als Schlüssel angegebene Status sollte nicht im Array enthalten sein

Daher folgender Stand:

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

...das Folgende sollte funktionieren:

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

...aber nicht das Folgende:

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

Antworte allen(1)
P粉864872812

您可以为此使用映射类型和排除

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

(在线演示)

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage