Typescript 如何按字段扩展泛型类型?

Typescript 如何按字段扩展泛型类型?,typescript,Typescript,我尝试使用泛型类型: export abstract class Tree<T extends { children?: T[] }> { } 这是一种很好的方法吗?导出接口分支{ export interface Branch { name: string; children: Branch[] } export class Tree<T extends Branch> { constructor(public root: T) {} } export

我尝试使用泛型类型:

export abstract class Tree<T extends { children?: T[] }> {
}
这是一种很好的方法吗?

导出接口分支{
export interface Branch {
  name: string;
  children: Branch[]
}

export class Tree<T extends Branch> {
  constructor(public root: T) {}
}

export class BranchImpl implements Branch {
  children: BranchImpl[] = [];
  constructor(public name: string) {}
}

const branch0 = new BranchImpl("root");
const branch1 = new BranchImpl("branch1");
branch0.children.push(branch1);
branch0.children.push(new BranchImpl("branch2"));
branch1.children.push(new BranchImpl("branch3"));
console.log(new Tree<BranchImpl>(branch0));
名称:字符串; 儿童:分支机构[] } 导出类树{ 构造函数(公共根:T){} } 导出类BranchImpl实现分支{ 儿童:BranchImpl[]=[]; 构造函数(公共名称:字符串){} } const branch0=新的BranchImpl(“根”); const branch1=新BranchImpl(“branch1”); branch0.儿童.推送(branch1); branch0.children.push(新BranchImpl(“branch2”)); branch1.children.push(新BranchImpl(“branch3”); console.log(新树(branch0));

您可以使用接口分支定义树的子级,并使用类树包装根分支。

我认为最好使用属性children创建一个类,然后声明T扩展了它。特雷索,像这样<代码>类MyChildrenClass{children:T[];}?然后如何使用它<代码>类TreeMap扩展了树{}而没有“类MyChildrenClass{childrenclass{children:T[];}”,这由您决定。我不知道孩子应该代表什么。number/string/any等。它不能是t,因为您正在使用子类定义t
export interface Branch {
  name: string;
  children: Branch[]
}

export class Tree<T extends Branch> {
  constructor(public root: T) {}
}

export class BranchImpl implements Branch {
  children: BranchImpl[] = [];
  constructor(public name: string) {}
}

const branch0 = new BranchImpl("root");
const branch1 = new BranchImpl("branch1");
branch0.children.push(branch1);
branch0.children.push(new BranchImpl("branch2"));
branch1.children.push(new BranchImpl("branch3"));
console.log(new Tree<BranchImpl>(branch0));