如何在打字稿中输入递归对象?

Dev*_*low 2 typescript

我有下一个对象

const obj = {
 name: 'First',
 age: 22,
}
Run Code Online (Sandbox Code Playgroud)

该对象有下一个接口

interface ITask {
 name: string,
 age: number
}
Run Code Online (Sandbox Code Playgroud)

但经过一些数据映射后,我创建了一个像这样的递归对象

const obj = {
 name: 'First',
 age: 22,
 next: {
   name: 'Second',
   age: 12,
   next: { EMPTY OBJECT WHEN END }
 }
}
Run Code Online (Sandbox Code Playgroud)

我尝试以这种方式输入这个对象,但它不起作用

type IRecursiveTask =  {
        [key: string]: IRecursiveTask
} & ITask
Run Code Online (Sandbox Code Playgroud)

Sil*_*olo 10

type定义类型别名,并且类型别名不能引用自身。不过,interface可以。

interface IRecursiveTask {
  name: string;
  age: number;
  next: IRecursiveTask | {};
}
Run Code Online (Sandbox Code Playgroud)

  • 该类型应该有效,但您描述的原因并不是原因。“type”别名工作得很好。https://tsplay.dev/mbAXPN 这是有效的,因为该类型在已知属性而不是索引签名中是递归的。 (3认同)