Typescript:你能递归地键入一个对象吗

Typescript:你能递归地键入一个对象吗,typescript,types,Typescript,Types,我想让typescript递归地推断对象键的类型及其子对象的键。例如,给出以下声明: const o:A<X> = { a:'1', b: { c: '2' } } 常数o:A={ 答:"一",, b:{ c:'2' } } 我想定义A,这样X将是“A”|“b”|“c”。使用keyof我可以让Typescript推断出第一层(即X=“a”|“b”),但不能推断出后续的层。是否可以让Typescript推断孙子节点的键类型?尝试以下操作: A型={ [X中的id

我想让typescript递归地推断对象键的类型及其子对象的键。例如,给出以下声明:

const o:A<X> = {
  a:'1',
  b: {
    c: '2'
  }
}
常数o:A={
答:"一",,
b:{
c:'2'
}
}
我想定义
A
,这样
X
将是
“A”|“b”|“c”
。使用
keyof
我可以让Typescript推断出第一层(即
X=“a”|“b”
),但不能推断出后续的层。是否可以让Typescript推断孙子节点的键类型?

尝试以下操作:

A型={
[X中的id]?:字符串| A
}

如果您试图获取一个对象,如
const o={a:'1',b:{c:'2'}
,并使用类型函数,如
DeepKeyof
计算
“a”|“b”|“c”
,则这是的副本。另一方面,如果您试图定义类型
a
,使
o
可分配给类型
a
,则@bsapaka下面的答案将适用。你想要哪一个?@jcalz:谢谢你的澄清。我主要对前者感兴趣,但了解两者都很有用。