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

TypeScript是否支持自定义内置类型?如何提取接口中带序号的属性前缀?

需求可实现,不需要自定义内置类型,借助TypeScript现有模板字面量模式匹配、key重映射能力就能完成目标。

工具类型实现

type MagicType<T> = {
  // 遍历所有属性key,匹配带1/2/3后缀的key,提取前缀作为新key,不匹配的直接过滤
  [K in keyof T as K extends `${infer Prefix}${1 | 2 | 3}` ? Prefix : never]: unknown
// 提取最终对象的所有key,自动去重后就是所需前缀联合类型
}[keyof any]

使用示例

interface A {
  propA: string; // 不需要提取该属性
  propB: string; // 不需要提取该属性
  propC: string; // 不需要提取该属性

  propD1: string;
  propD2: string;
  propD3: string;

  propE1: string;
  propE2: string;
  propE3: string;

  propF1: string;
  propF2: string;
  propF3: string;
}

// 结果符合预期:type Result = "propD" | "propE" | "propF"
type Result = MagicType<A>

关于自定义内置类型的说明

TypeScript暂不支持普通开发者自定义全局内置类型,所有内置工具类型都由TypeScript核心库预定义提供。但绝大多数业务、工具层面的类型需求,都可以通过现有类型编程能力组合实现,不需要修改或新增内置类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:30:01