Typescript 无法记录继承类中定义的属性
这里我有一个Typescript 无法记录继承类中定义的属性,typescript,Typescript,这里我有一个树类,它有一个name prop,因为常青树有name它会被记录下来,但是这不起作用 class Tree { name?: string; constructor() { console.log(this.name); } } class Evergreen extends Tree { name = 'evergreen'; } const x = new Evergreen(); // prints undefined class Tree {
树
类,它有一个name prop,因为常青树
有name
它会被记录下来,但是这不起作用
class Tree {
name?: string;
constructor() {
console.log(this.name);
}
}
class Evergreen extends Tree {
name = 'evergreen';
}
const x = new Evergreen(); // prints undefined
class Tree {
name?: string;
constructor() {
console.log(this.name);
}
}
class Evergreen extends Tree {
name = 'evergreen';
constructor() {
super.bind(this)();
}
}
const x = new Evergreen();
这是通过重新定义构造函数来实现的
class Tree {
name?: string;
constructor() {
console.log(this.name);
}
}
class Evergreen extends Tree {
name = 'evergreen';
constructor() {
super();
console.log(this.name);
}
}
const x = new Evergreen(); // undefined / evergreen
我试图找到一种语法,防止需要不同的构造函数
理想情况下,super
已绑定,但这不起作用
class Tree {
name?: string;
constructor() {
console.log(this.name);
}
}
class Evergreen extends Tree {
name = 'evergreen';
}
const x = new Evergreen(); // prints undefined
class Tree {
name?: string;
constructor() {
console.log(this.name);
}
}
class Evergreen extends Tree {
name = 'evergreen';
constructor() {
super.bind(this)();
}
}
const x = new Evergreen();
这根本不是问题。因为OOP就是这样工作的。如果为继承类中的属性定义默认值,则只能在此类及其子类中使用,而不能在任何父类中使用。假设父类中有一个逻辑,该逻辑与该属性的默认值一起工作:
class Parent {
name?: string;
getNameLength(): string {
return this.name.length; // It will gives you an error!
}
}
class Child extends Parent {
name = 'default';
}
或者像这样:
class Parent {
name: string; // It will gives you an error!
getNameLength(): string {
return this.name.length; // Yes, it will correct now
}
}
class Child extends Parent {
name = 'default';
}
如果任何人在没有继承类的情况下使用此父类,他如何确保此父类具有默认值的初始值设定项
在本例中,TS和JS运行时的行为绝对正确。您无法覆盖此行为。这非常奇怪和有趣。显然,有一些方法可以重新构造代码,使其不成为问题,但我无法解释为什么它现在不起作用。