新属性无法在派生类构造函数中实例化



我在TS操场上尝试了这件代码,并遇到了这个奇怪的东西

class Animal {
    constructor(public name: string) {
        this.name = name;
     }
}
    class Snake extends Animal {
        constructor(name: string, isPoisonous: boolean) {
            super(name);
            this.isPoisonous= isPoisonous;
        }
    }

我在Snake构造函数中引入了isPoisonous属性,对我说'Property 'isPoisonous' does not exist on type 'Snake''。有趣的是,ES6中的同一件事可以很好地编译。

您需要设置访问级别(IE public),以将某些内容设置为类变量,而不是仅针对构造函数的参数。因此,在值解决您的问题之前添加public

也就是说,从时尚的角度来看,最好是转发这些属性:

class Animal {
  public name : string;
  constructor(public name: string) {
    this.name = name;
  }
}
class Snake extends Animal {
  public isPoisonous : boolean;
  constructor(name: string, isPoisonous: boolean) {
    super(name);
    this.isPoisonous = isPoisonous;
  }
}

最新更新