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

使用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 extends get${infer Rest}`` 用于捕获键名中 get 之后的部分,存入 Rest 类型变量。
  • 首字母小写处理:Uncapitalize<Rest> 将提取出的首字母大写部分(如 Name)转为小写(如 name)。
  • 值类型转换:通过 Type[Property] extends () => infer ReturnType 提取原函数的返回值类型,替换原有的函数类型。
  • 过滤非目标键:用 never 排除不符合 get 前缀规则的键名,避免混入无关属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:11:07