限制通用记录中的数组值不包含与其分配给的键相同的值?
P粉252116587
P粉252116587 2023-09-16 14:13:52
0
1
745

我正在实现一个简单的状态机。配置如下所示:

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

每个键都应该是一个字符串枚举。

每个值都应该是相同字符串枚举的数组,但是作为键给出的 State 不应包含在数组中

因此考虑到以下状态:

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

...以下应该有效:

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

...但不是以下内容:

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

全部回复(1)
P粉864872812

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

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

(在线演示)

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板