TypeScript:如何选取属性名以指定字符串开头的类型属性
提取指定前缀属性的TypeScript类型实现
要从已有类型中创建仅包含属性名以指定字符串开头的新类型,直接使用Pick<Origin, _${string}>会报错,因为_${string}是通用字符串类型,不满足keyof Origin的约束条件。
原始类型
type Origin = { testA: string, testB: string, _c: string, _d: string, example: string, anotherName: string, }
期望结果
type Result = { _c: string, _d: string };
正确实现方案
先定义一个工具类型,筛选出目标类型中符合前缀要求的键:
type KeysWithPrefix<T, Prefix extends string> = { [K in keyof T]: K extends `${Prefix}${string}` ? K : never; }[keyof T];
再结合Pick工具类型使用:
type Result = Pick<Origin, KeysWithPrefix<Origin, "_">>;
逻辑说明
- 遍历目标类型
T的所有键K,通过条件类型判断K是否是以指定前缀Prefix开头的字符串; - 符合条件的键保留原类型,不符合的设为
never; - 最后通过
[keyof T]提取所有非never的键,得到符合要求的键集合,传入Pick即可生成目标类型。
内容的提问来源于stack exchange,提问作者Simone Sessa
相关产品推荐
相关产品推荐

