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

如何在TypeScript类型或接口中为键添加!前缀生成转义映射类型?

可以实现,你只需要使用TypeScript的键重映射+模板字面量特性就可以完成,正确的类型写法如下:

// 仅处理键为string类型的情况,符合你的业务场景
export type EscapeMappedT<T extends Record<string, any>> = {
  [K in keyof T as K | `!${string & K}`]: T[K]
}

你可以直接测试效果:

// 输入的原始类型
type Input = {
  ToJSON: () => object;
  a: unknown;
  b: unknown;
}

// 转换后的类型,完全符合你的预期
type Output = EscapeMappedT<Input>
// Output类型结构:
// {
//   ToJSON: () => object;
//   "!ToJSON": () => object;
//   a: unknown;
//   "!a": unknown;
//   b: unknown;
//   "!b": unknown;
// }

如果你的原始类型可能存在非string类型的键(比如number、symbol),可以用下面的兼容写法,非string键会原样保留不会添加!前缀:

export type EscapeMappedT<T extends Record<any, any>> = {
  [K in keyof T as K extends string ? K | `!${K}` : K]: T[K]
}

以上写法要求TypeScript版本 >=4.1,该版本开始支持模板字面量类型和键重映射语法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:06:04