由于模板字面值降落在Typescript (PR)中,我们可以访问类型中的以下函数:
- 大写
- 小写
- 利用
- Uncapitalize
查看文档获取更多信息。
知道这一点,我怀疑我想要达到的目标是不可能的,但问一下,以防我错过了什么。
我有一个接口,它有一组属性…还有一些可以进化的。我需要能够在一个类型中提取那些可以进化的。问题在于它们带有增量数字(从1到3)。下面的例子更容易理解:
interface A {
propA: string; // not interested in that
propB: string; // not interested in that
propC: string; // not interested in that
propD1: string;
propD2: string;
propD3: string;
propE1: string;
propE2: string;
propE3: string;
propF1: string;
propF2: string;
propF3: string;
}
不知道如何实现它或如果它是可能的…但是我想要一个这样的类型:
MagicType<A>
应该返回'propD' | 'propE' | 'propF'
。
基本上,它应该能够看到这些存在与1
,2
,3
在最后。
我敢肯定我要求的太多了,但是谁知道呢:)。
虽然这看起来不可行与现有的模板文字函数(Uppercase
,Lowercase
,Capitalize
,Uncapitalize
),我也想知道如果它是目前可以创建自定义的内在类型?
谢谢你的任何想法,甚至只是确认这是不可行的
<Intrinsic"意味着内置在编译器中,所以严格的答案是你需要fork编译器。>
当然,真正的答案是你不需要你的类型是内在的:
type EasyAs123<K extends string> = K extends `${infer U}${1 | 2 | 3}` ? U : never
// type Test = "propD" | "propE" | "propF"
type Test = EasyAs123<keyof A>
操场上联系