【问题标题】:Typescript: Can you recursively type an object [duplicate]打字稿:你能递归地输入一个对象吗[重复]
【发布时间】:2020-04-20 07:20:15
【问题描述】:

我想让打字稿递归地推断对象键的类型及其子对象的键。例如给出下面的声明:

const o:A<X> = {
  a:'1',
  b: {
    c: '2'
  }
}

我想定义A 以便X 将是"a"|"b"|"c"。使用 keyof 我可以让 Typescript 推断第一层(即X = "a"|"b"),但不能推断后续层。是否可以让 Typescript 推断出孙节点的键类型?

【问题讨论】:

  • 如果您尝试获取像const o = {a:'1', b: {c: '2'}} 这样的对象并使用像DeepKeyof&lt;typeof o&gt; 这样的类型函数,则计算结果为"a"|"b"|"c",那么这是Keyof nested child objects 的副本。另一方面,如果您尝试定义一个类型 A 使得 o 可分配给类型 A&lt;"a"|"b"|"c"&gt; 那么@bsapaka 下面的答案将适用。你要哪一个?
  • @jcalz:感谢您的澄清。主要是我对前者感兴趣,但两者都很有用。

标签: typescript types


【解决方案1】:

试试这个:

type A<X extends string|number> = {
  [id in X]?: string | A<X>
}

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 2023-04-07
    • 2019-05-26
    相关资源
    最近更新 更多