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

TypeScript如何从嵌套方法对象生成指定窄化联合类型

解决方案

直接通过 TypeScript 映射类型、模板字面量类型、内置工具类型组合实现,代码如下:

const Methods = {
    firstNamespace: {
        firstMethod: (p: string) => {},
        secondMethod: (p: number, k: number) => {}
    },
    secondNamespace: {
        firstMethod: (p: number) => {}
    }
}

type MethodsType = typeof Methods

type GenerateMethodUnion<T> = {
  [NS in keyof T]: {
    [M in keyof T[NS]]: {
      method: `${string & NS}/${string & M}`
      payload: Parameters<T[NS][M]>
    }
  }[keyof T[NS]]
}[keyof T]

// 最终生成的类型和你预期的 Expected 完全等价
type Result = GenerateMethodUnion<MethodsType>

用到的核心类型特性

  • 用 typeof 从 JavaScript 运行时值提取对应的 TypeScript 类型定义
  • 嵌套映射类型遍历两层对象的key,逐层生成对应方法的类型结构
  • 模板字面量类型拼接命名空间名称与方法名,生成符合要求的 method 字段字面量类型
  • 内置工具类型 Parameters 提取函数参数的类型元组,直接作为 payload 字段类型
  • 索引访问语法 T[keyof T] 将映射生成的对象值类型转换为联合类型,得到最终的窄化联合结构

如果需要支持更深层级的嵌套方法对象,可以把上面的工具类型改写成递归版本即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:15:04