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
相关产品推荐
相关产品推荐

