【问题标题】: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

【问题讨论】:

    标签: typescript


    【解决方案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 个。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 2019-10-06
      • 2021-01-05
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多