gpt4 book ai didi

来自嵌套对象的 TypeScript 模板文字字符串

转载 作者:行者123 更新时间:2023-12-04 00:50:40 32 4
gpt4 key购买 nike

我想获得此对象类型中 states 下所有键的联合,

我有一个 state 键的嵌套对象。我想在 state 下以点表示法获得所有这些键的联合。

例如,对于这个配置:

type Config = {
initial: string;
states: {
idle: {
on: {
START: string;
};
};
running: {
on: {
PAUSE: string;
};
};
paused: {
initial: string;
states: {
frozen: {
on: {
HEAT: string;
};
};
};
on: {
RESET: string;
};
};
};

我想要'idle' | '运行' | '暂停' | '暂停.卡住'

这可能吗?有什么想法吗?

最佳答案

看起来像是 recursive conditional types 的另一份工作以及template literal types :

type StatesKeys<T> = T extends { states: infer S } ? {
[K in Extract<keyof S, string>]: K | `${K}.${StatesKeys<S[K]>}`
}[Extract<keyof S, string>] : never

type ConfigStatesKeys = StatesKeys<Config>;
// type ConfigStatesKeys = "idle" | "running" | "paused" | "paused.frozen"

StatesKeys<T>检查T为其states属性(property)S ,并为其每个键生成 K我们想要的联合,即K本身,加上 K 的可能串联带点和 StatesKeys<S[K]>> .也就是说,我们连接每个键 K使用 S[K] 中的任何嵌套键.如果没有嵌套键,并且 StatesKeys<S[K]>never , 模板文字也将变为 never ,所以我们不必对它进行特殊处理。

Playground link to code

关于来自嵌套对象的 TypeScript 模板文字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66819917/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com