TypeScript如何给指定类型的所有属性key添加自定义字符串前缀
实现方案
该功能在 TypeScript 中完全可以实现,借助映射类型重映射、模板字面量类型以及内置的 Capitalize 工具类型即可完成需求,具体实现如下:
工具类型定义
type PrefixValues<P extends string, T extends object> = { [K in keyof T as `${P}${Capitalize<string & K>}`]: T[K] }
代码说明
- 泛型约束:
P extends string限定传入的前缀为字符串类型,T extends object限定待处理的源类型为对象类型 - 键名重映射:通过
as子句修改原属性名,Capitalize<string & K>会将原属性名的首字母转为大写,和前缀拼接后正好符合前缀+驼峰原属性名的命名规则 - 保留属性值类型:直接将原属性的值类型
T[K]赋值给新属性,不会修改值的类型定义
效果验证
代入你给出的示例测试:
type Values = { name: "Bob", email: "bob@mail.com" } type NewValues = PrefixValues<"my", Values>; // 最终 NewValues 的类型等价于: // { // myName: "Bob", // myEmail: "bob@mail.com" // }
完全匹配你需要的 Values.name 对应 NewValues.myName 的效果。
内容的提问来源于stack exchange,提问作者Kody R.
相关产品推荐
相关产品推荐

