繁体   English   中英

typescript 中的最少抽象类型

[英]Least abstract type in typescript

我经常使用以下结构:

const v = {
  a: "string1",
  b: "string2",
  c: "string3"
}

const x: keyof typeof v = "a"

协助图书馆的用户并让编辑器显示可能的版本。

在上面,如果v接收到显式类型{a: string, b: string, c: string} ,这将停止工作,因为typeof解析为这个更通用的类型并且不再将单个键视为该类型的一部分。

但是,我希望能够在类型下键入v提取所述值的键。 这里的原因是 v 是一个大而复杂的 object 女巫几个化身。

有没有办法避免这种情况,以便我既可以键入 v 又可以提取具体 object 的密钥?

具体来说,我有以下类型的值

type T = {
  a: {
    [p: string]: string
  }
  b: {
    [p: string]: string
  }
}

价值:

const t: T = {
  a: {
    a1: "n1",
    a2: "n2"
  },
  b: {
    b1: "m1",
    b2: "m2"
  }
}

我的目标是制作一个带有签名const f: <TE extends T>(a: keyof TE["a"]) => boolean的 function 来识别TET的最少抽象类型。 IE。

  • f("a3")应该导致类型错误
  • f("a2")不应导致类型错误。

我一直在寻找同样的东西。 我找到的唯一解决方案是使用工厂 function:

type T = {
  a: {
    [p: string]: string
  }
  b: {
    [p: string]: string
  }
}

function createT<TE extends T>(obj: TE): TE {
   return obj;
}

const t = createT({
   a: {
    a1: "n",
    a2: "n"
  },
  b: {
    b1: "n",
    b2: "n"
  }
});

type TE = typeof t;

const f: (a: keyof TE["a"]) => boolean = () => true;
f('a1');

游乐场链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM