JavaScript разрешает динамическое наследование.Мне было интересно, если TypeScript принять это во внимание.Следующий код может проиллюстрировать проблему.
// inheritance.js
function fn1() {
this.a = "fn1";
}
function fn2() {
// ...
}
let f1 = new fn1(); // "instance" of fn1
let f2 = new fn2(); // "instance" of fn2
// inheritance
f2.__proto__ = f1;
// f2.a inherits from f1
console.log(f2.a); // output: "fn1"
Как вы можете видеть, мы добавляем объект f1, который является экземпляром fn1, в цепочку прототипов f2.Поэтому мой вопрос заключается в следующем: можем ли мы воспроизвести это поведение в TypeScript с помощью классов?Как бы изменить следующий код, чтобы получить ожидаемый результат?
// inheritance.ts
class class1 {
public a: string = "class1";
}
class class2 extends class1 {
// ...
}
let c1 = new class1();
let c2 = new class2();
console.log(c1.a); // output: "class1"
// this line would not work
c2.__proto__ = c1;
// change value c1.a
c1.a = "dynamical inheritance test";
console.log(c2.a); // should print value of c1.a (i.e "dynamical inheritance test")