如何获取嵌套对象的边缘非对象值的联合类型?
如何从深度嵌套对象生成仅包含边缘非对象值的联合类型?
给定对象
const deepNestedObject = { a: "value", b: { c: "nestedvalue", d: { e: "deepNestedValue" } } }
需求
需要实现一个DeepValueOf类型,使得:
type EdgeValueUnion = DeepValueOf<typeof deepNestedObject>;
EdgeValueUnion等价于"value" | "nestedvalue" | "deepNestedValue",即仅包含对象树中最底层的非对象值。
尝试的实现代码
type ValueOf<T> = T[keyof T]; type DeepValueOf< T extends Record<string, unknown>, Key = keyof T > = Key extends string ? T[Key] extends Record<string, unknown> ? DeepValueOf<T[Key]> : ValueOf<T> : never;
存在的问题
当前实现存在缺陷,它会允许对象树中的中间对象值被赋值给EdgeValueUnion类型的变量,例如以下代码不会触发类型错误:
const edgeValue: EdgeValueUnion = deepNestedObject.b;
内容的提问来源于stack exchange,提问作者JD Francis
相关产品推荐
相关产品推荐

