You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取嵌套对象中tabs后代对象的所有键名联合类型?

获取深度嵌套数组类型中所有tabs对象的键名联合类型

我有一个深度嵌套的数组类型Test,需要提取其中所有tabs后代对象的键名,组成联合类型。举个例子,基于以下Test类型:

type Test = [
    {
        asds: 123,
        fefes: "fdsfds",
        meta: {
            ma: string,
            child: boolean,
            tabs: {
                tab1: "123",
                tab2: "234",
                tab3: "345"
            }
        }
    },
    {
        dffg: "dfsf"
    },
    {
        dfs: 4454,
        meta: {
            tabs: {
                tab4: "888"
            }
        }
    },
    {
        meta: {
            eee: 888
        }
    }
]

期望得到的结果是"tab1" | "tab2" | "tab3" | "tab4"。


解决方案

可以通过递归条件类型遍历嵌套结构,精准提取所有tabs对象的键:

// 递归提取类型中所有tabs对象的键
type ExtractTabKeys<T> = T extends { tabs: infer U }
  ? keyof U
  : T extends object
  ? { [K in keyof T]: ExtractTabKeys<T[K]> }[keyof T]
  : never;

// 处理数组类型,遍历每个元素提取tab键
type TabKeysFromArray<T extends any[]> = ExtractTabKeys<T[number]>;

// 最终得到目标联合类型
type Result = TabKeysFromArray<Test>; // 类型为 "tab1" | "tab2" | "tab3" | "tab4"

代码说明

  • ExtractTabKeys:核心递归类型,先检查当前类型是否包含tabs属性,若有则直接返回该对象的键联合类型;若当前是普通对象,则递归遍历其所有属性继续查找tabs;非对象类型返回never,不参与联合类型构建。
  • TabKeysFromArray:针对数组类型,先取出数组所有元素的联合类型,再传入ExtractTabKeys处理,汇总所有元素中的tabs键。

内容的提问来源于stack exchange,提问作者Autumn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 11:20:11