如何编写TypeScript工具类型将小驼峰属性名转为帕斯卡命名
TypeScript 小驼峰转帕斯卡命名工具类型实现
完全可以通过TS 4.1+ 新增的键重映射、内置字符串工具类型实现需求,具体实现如下:
基础版(仅处理单层对象)
直接遍历对象属性,通过内置Capitalize工具类型将字符串类型的属性名首字母转为大写,值类型保持原样:
type CamelToPascal<T> = T extends object ? { [K in keyof T as K extends string ? Capitalize<K> : K]: T[K] } : T
效果验证
type Driver = { firstName: string lastName: string active: boolean } type PascalDriver = CamelToPascal<Driver> // 转换后等价于: // type PascalDriver = { // FirstName: string // LastName: string // Active: boolean // }
完全匹配预期转换结果。
递归增强版(支持嵌套对象、数组场景)
如果DTO存在嵌套对象、对象数组结构,可以使用递归版本,所有层级的小驼峰属性都会被统一转换:
type CamelToPascal<T> = // 处理数组类型:递归处理数组元素 T extends (infer Item)[] ? CamelToPascal<Item>[] : // 处理对象类型:重映射键名+递归处理属性值 T extends object ? { [K in keyof T as K extends string ? Capitalize<K> : K]: CamelToPascal<T[K]> } : // 基础类型直接返回 T
注意事项
- 该实现依赖TypeScript 4.1及以上版本,依赖的核心特性为键重映射(Key Remapping via
as)和模板字面量类型,低版本TS无法支持 - 实现默认保留非字符串类型的属性键(如数字、Symbol键),如果业务中不存在这类键可以简化判断逻辑
内容的提问来源于stack exchange,提问作者Medisch Labo Bruyland
相关产品推荐
相关产品推荐

