gpt4 book ai didi

typescript - 键入第二深度界面对象的键

转载 作者:行者123 更新时间:2023-12-04 01:13:26 25 4
gpt4 key购买 nike

在第 3 方库(我无法更改)上,我有以下界面:

interface MyInterface {
x: {
a: 1,
b: 2,
c: 3,
},
y: {
d: 4,
e: 5,
f: 6,
},
z: {
g: 7,
h: 8,
i: 9,
},
}

我想创建一个类型 (Values2ndDepth) 来描述接口(interface)中所有对象的所有键的联合,因此将强制执行以下内容:

let key: Values2ndDepth<MyInterface>;
key = 'a'; // ok
key = 'i'; // ok
key = 'j'; // error - as doesn't exist in the above.

我的一些尝试:

type Values2ndDepth<T extends object> = keyof T[keyof T];
type Values2ndDepth<T extends object> = T extends {[k: string]: (infer R)} ? keyof R : never;
type Values2ndDepth<T extends object> = T extends Record<string, infer R> ? keyof R : never;
type Values2ndDepth<T extends object, K extends keyof T = keyof T> = T[K] extends object ? keyof T[K] : never;

最佳答案

过了一会儿 - 我找到了解决方案!

type Values2ndDepth<T extends object, K extends keyof T = keyof T> =
K extends keyof T ? T[K] extends object ? keyof T[K] : never : never;
  • 确保 K 描述了 T 的键
  • 确保 T[K] 的值是另一个对象
  • 拿到T[K]的 key

还有其他解决方案吗?也许更优雅的东西?

关于typescript - 键入第二深度界面对象的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64083282/

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