限制通用記錄中的陣列值不包含與其指派給的鍵相同的值?
P粉252116587
P粉252116587 2023-09-16 14:13:52
0
1
700

我正在實作一個簡單的狀態機。配置如下所示:

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>[];
};

(線上示範)

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!