更改另一个 class' 实例的 class

Change the class of another class' instance

我有一个 Angular 4 Typescript 应用程序,它有多种类型的对象,这些对象由 类 定义,具有不同的类型属性,如下所示:

export class Fruit {
  name: string;
  type: string;

  constructor(columnName: string) {
    this.name = columnName;
  }
}

export class Apple extends Fruit {
  /* additional properties */

 constructor(name: string) {
    super(name);
  }

  get type(): string {
    return 'apple';
  }
}

export class Orange extends Fruit {
  /* additional properties different from Apple */

 constructor(name: string) {
    super(name);
  }

  get type(): string {
    return 'Orange';
  }
}

这些对象属于数组成员中的篮子对象,就像篮子里的水果。我希望能够通过表单中的下拉菜单动态设置水果的种类。每次我这样做,我都会得到:

ERROR TypeError: Cannot set property type of [object Object] which has only a getter

我是 Typescript 的新手,我想我已经在做一些高级的事情了,但这是我正在做的项目所必需的。


编辑:

我使用 ng-formly 来生成我的表单元素。相关的 html 看起来像这样:

<form class="formly" role="form" [formGroup]="fruitBasket" novalidate>
  <div formArrayName="fruits">
    <div *ngFor="let control of fruitBasketForm.controls.fruits.controls; let i = index">
      <formly-form
        [model]="fruitBasket.fruits[i]"
        [fields]="fruitFields[i]"
        *ngIf="i === currFruitIndex">
      </formly-form>
    </div>
  </div>
</form>

在此示例中,您的超级 class 应该有一个 setter,因为您的 type 字段中存在名称冲突

export class Fruit {
  name: string;
  type: string;

  constructor(columnName: string) {
    this.name = columnName;
  }

  set type(type){
    this.type = type;
  }
}

但是继承的真正用途是每个对象都应该知道它们属于哪个 class 并在它们的 class 中使用该方法。如果您依赖于继承体系结构中的 type 属性,那么您并没有真正使用继承的全部功能。