是否可以构建自定义的内在类型?



由于模板字面值降落在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>

操场上联系

最新更新