如何初始化这个泛型类

Posted

技术标签:

【中文标题】如何初始化这个泛型类【英文标题】:How to initialize this generic class 【发布时间】:2020-03-15 00:06:11 【问题描述】:

在这个类定义中,它的构造函数参数取决于它自己。那么应该如何正确初始化这个类呢?

export class TreeNode<T> 
  constructor(public value: T, public children: TreeNode<T>[]) 

  toString(): string  return `TreeNode($this.value)`; 

(来源:https://github.com/angular/angular/blob/master/packages/router/src/utils/tree.ts)

【问题讨论】:

【参考方案1】:

TypeScript 可以根据传递给构造函数的内容来推断类型,无论你给它什么值都将是被推断的泛型。

const node = new TreeNode(42, []); // TreeNode's T will be inferred to 'number'.

你也可以显式传递一个类型参数,虽然推断通常更可取。

const node = new TreeNode<string>('Hello World', []);

Example on the TypeScript playground

【讨论】:

【参考方案2】:

你可以给它一个空列表,比如:

new TreeNode<Number>(0, [])

或者,如果你想让它有孩子,这样做:

new TreeNode<Number>(0, [
    new Number(1, []),
    new TreeNode<Number>(1, [])
])

【讨论】:

new Number 期望 0-1 个参数,但得到了 2 个。

以上是关于如何初始化这个泛型类的主要内容,如果未能解决你的问题,请参考以下文章

在 Typescript 的泛型类中初始化泛型类型

在 kotlin 中创建泛型类的新实例的正确方法是啥?

TypeScript创建泛型类报错(泛型类)

TypeScript创建泛型类报错(泛型类)

TypeScript创建泛型类报错(泛型类)

泛型的使用