使用TypeScript键重映射缩短键名(移除前缀)
TypeScript 键重映射反向操作:移除键名前缀
当然可以通过 TypeScript 的键重映射(as 语法)实现反向操作——移除键名前缀。核心是用模板字符串类型匹配带前缀的键名,提取并转换剩余部分作为新键名,同时调整对应的值类型。
具体实现示例
针对你给出的 InputPerson 场景,我们可以定义 RemoveGetters 工具类型来移除 get 前缀:
type RemoveGetters<Type> = { // 匹配以"get"开头的键名,提取后续部分并转为首字母小写 [Property in keyof Type as Property extends `get${infer Rest}` ? Uncapitalize<Rest> : never]: // 将原函数类型转为其返回值类型 Type[Property] extends () => infer ReturnType ? ReturnType : Type[Property] }; // 测试用例 type InputPerson = { getName: () => string; getAge: () => number; // 非get前缀的键会被自动过滤 unrelatedProp: boolean; }; type ExpectedOutputPerson = RemoveGetters<InputPerson>; // 最终结果:{ name: string; age: number }
关键语法解析
- 模板字符串匹配:
Property extendsget${infer Rest}`` 用于捕获键名中get之后的部分,存入Rest类型变量。 - 首字母小写处理:
Uncapitalize<Rest>将提取出的首字母大写部分(如Name)转为小写(如name)。 - 值类型转换:通过
Type[Property] extends () => infer ReturnType提取原函数的返回值类型,替换原有的函数类型。 - 过滤非目标键:用
never排除不符合get前缀规则的键名,避免混入无关属性。
内容的提问来源于stack exchange,提问作者Travis Watson
相关产品推荐
相关产品推荐

