可通过条件类型配合infer在编译期静态解析嵌套结构,核心是将字段提取转化为模式匹配与递归分解:对对象用T extends {[k in infer K]: infer V}提取键值,对数组用T extends (infer Item)[]提取元素,组合实现多级穿透;需兼容undefined、null及可选字段,结合分布式条件类型与递归建模JSON树状结构,并支持OpenAPI规范自动生成即用型类型。

可以通过条件类型配合 infer 关键字,在编译期静态解析嵌套结构的形状,无需运行时反射。核心在于把“提取字段”转化为“模式匹配 + 递归分解”的类型运算。
用 infer 逐层解构对象与数组
面对形如 { user: { profile: { name: string, tags: string[] } } } 的嵌套结构,不能靠手动写接口,而应让类型系统自动“剥洋葱”:
- 对对象类型,用
T extends { [k in infer K]: infer V } ? ... : never提取键名K和值类型V - 对数组类型,用
T extends (infer Item)[] ? Item : never提取元素类型 - 组合使用可实现多级穿透,例如
DeepValue<T, 'user' | 'profile' | 'name'>可推导出最终字段类型
处理联合与可选字段的鲁棒性设计
真实 JSON 常含 undefined、null 或缺失字段。条件类型需主动兼容:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 用
Exclude<T, undefined | null>过滤空值分支 - 对可选属性(
prop?: string),用T extends { prop?: infer V } ? V : never捕获其非空类型 - 结合分布式条件类型,让
string | number | null自动拆解并分别处理每个成员
递归建模任意深度嵌套
JSON 的树状结构天然适合递归类型。定义一个能自我调用的工具类型:
type JsonSchema<T> = T extends string | number | boolean | null
? 'primitive'
: T extends Array<infer U>
? ['array', JsonSchema<U>]
: T extends object
? ['object', { [K in keyof T]: JsonSchema<T[K]> }]
: 'unknown';
该类型可将 { a: { b: [1, 2] } } 编译为 ['object', { a: ['object', { b: ['array', 'primitive'] }] }],形成可序列化的契约描述。
对接 OpenAPI 规范生成即用型类型
若已有 OpenAPI 3 YAML/JSON,openapi-typescript 会把 allOf、oneOf、深层 $ref 自动转为交叉或联合类型:
- 嵌套响应体
components.schemas.UserWithPosts→ 生成带posts: Post[]的完整接口 -
anyOf: [{ $ref: '#/components/schemas/Admin' }, { $ref: '#/components/schemas/User' }]→ 生成Admin | User - 所有字段名、是否必需、枚举值均保留,直接作为类型契约交付前端或文档工具

















