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

寻求可将复杂TypeScript类型拆解为基础原始类型的工具

TypeScript复杂类型扁平化工具推荐

以下是几种能把嵌套、泛型、继承的复杂TS类型拆解为扁平化原始类型的方案,适配你的文档需求:

  • IDE原生查看功能
    VS Code、WebStorm这类主流TS IDE都自带类型展开能力。把鼠标悬停在目标类型(比如Woop<T>)上,IDE会自动解析并展示完全展开后的类型结构——包含所有继承自Base、Something<T>的属性,以及泛型实例化后的具体字段。直接复制这个展开结果就能用在文档里。

  • 第三方工具库的预定义类型
    很多TS工具库提供了现成的扁平化工具类型,无需自己造轮子:

    • ts-toolbelt:通过$Obj.Merge或Expand类型可递归展开嵌套、继承的类型,支持泛型解析。
    • type-fest:提供ExpandDeep类型,能深度展开所有嵌套对象、联合类型和泛型实例。
      用法示例:
    import { ExpandDeep } from 'type-fest';
    // 展开Woop<MyType>为扁平化类型
    type FlatWoop = ExpandDeep<Woop<MyType>>;
    

    定义完成后,在IDE中查看FlatWoop即可得到完全扁平化的原始类型结构。

  • 手动实现展开类型
    如果不想引入第三方依赖,可自行编写递归展开的工具类型:

    // 浅展开:仅展开顶层类型
    type Expand<T> = T extends infer O ? { [K in keyof O]: O[K] } : never;
    
    // 深度展开:递归展开所有嵌套层级
    type ExpandDeep<T> = T extends object
      ? T extends infer O ? { [K in keyof O]: ExpandDeep<O[K]> } : never
      : T;
    

    将你的复杂类型传入ExpandDeep,比如type FlatA = ExpandDeep<A>,就能得到完全扁平化的结果。

  • 利用TS编译器输出展开类型
    可以借助tsc的错误提示获取展开后的类型:在代码中故意编写类型不匹配的代码,比如:

    // 故意触发类型错误,让编译器输出展开后的类型
    const temp: never = {} as Woop<MyType>;
    

    运行tsc --noEmit后,编译器会在错误信息里输出Woop<MyType>展开后的完整类型结构,直接提取即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:07:19