Пересечение типов шрифта и конструктор - PullRequest
0 голосов
/ 09 ноября 2018

Я хочу сделать свой составной тип из частей, у которых есть конструктор. Как я могу сделать или подражать этому? Я не могу вызвать super () в дополнении и не могу использовать расширение, так как Конструкторы для производных классов должны содержать вызов 'super'. И я не знаю, как напрямую создать объект типа person .

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

1 Ответ

0 голосов
/ 09 ноября 2018

Если ваш целевой язык TypeScript установлен ниже es6, классы компилируются в функции. Если вас устраивает код, основанный на том, как классы действительно реализованы в среде выполнения, вы можете просто вызвать их непосредственно в конструкторе, который реализует пересечение:

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

К сожалению, это не работает с реальными классами es6 - вы не можете вызвать конструктор классов без new. Вам нужно будет реализовать что-то вроде смеси миксинов, см. Ответы на этот вопрос , например.

...