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

TypeScript中如何从已有类型创建新类型时移除任意键?

不用手动写Pick的键列表,用映射类型加as子句就能自动排除索引签名,直接生成目标类型:

type DerivedType = {
  [K in keyof ExistingType as string extends K ? never : K]: ExistingType[K]
};

原理很直白:遍历ExistingType的所有键,判断当前键是不是索引签名对应的泛型键(这里你的索引签名是string类型,所以用string extends K判断)。如果是就排除这个键,否则保留原键和对应的属性类型,最终得到的就是只包含显式声明的name和mobile的类型。

要是想复用这个逻辑,可以封装成通用工具类型,还能兼容number类型的索引签名:

type OmitIndexSignature<T> = {
  [K in keyof T as string extends K ? never : number extends K ? never : K]: T[K]
};

// 之后直接调用即可
type DerivedType = OmitIndexSignature<ExistingType>;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:02:16