【问题标题】:Typescript type intersection and constructor打字稿类型交集和构造函数
【发布时间】:2019-04-13 10:31:09
【问题描述】:

我想用调用了它们的构造函数的片段来制作我的复合类型。我该怎么做或模仿这个?我不能在实现中调用 super(),也不能使用 extend,因为 派生类的构造函数必须包含一个“超级”调用。而且我不知道如何直接创建一个类型的对象人。

class bar {
  j: number;
  constructor() {
    this.j = 20;
  }
}

class baz {
  i: number;
  constructor() {
    this.i = 10;
  }
}

type person = bar & baz;

class p implements person {
  i: number;
  j: number;
  constructor() {}
}

let _p = new p();
alert(_p.i) //undefined, want it to be 10

【问题讨论】:

    标签: typescript types type-conversion


    【解决方案1】:

    如果你的 TypeScript 目标语言设置在 es6 以下,类会被编译成函数。如果您对依赖于类在运行时环境中实际实现方式的代码感到满意,您可以直接在实现交集的构造函数中调用它们:

    class p implements person {
      i: number;
      j: number;
      constructor() {
        bar.call(this);
        baz.call(this);
      }
    }
    

    不幸的是,这不适用于真正的 es6 类——没有new,你不能调用类构造函数。您将必须实现诸如 mixin 组合之类的东西,请参阅this question 的答案以获取示例。

    【讨论】:

    • 如何在 p 类中省略这个 bar/baz 引用?我希望它是独立于构图的,所以它不应该知道他的部分。
    • 如果我理解正确,你想声明交集类型,然后有一个只引用交集类型的实现,而不是它的组成部分,但以某种方式实现了组成部分必须提供的所有内容?这是不可能的。
    猜你喜欢
    • 2017-01-29
    • 2022-01-13
    • 2019-07-05
    • 2017-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    相关资源
    最近更新 更多