更改另一个类的实例的类

时间:2017-09-07 16:05:02

标签: angular typescript typescript2.4

我有一个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>

1 个答案:

答案 0 :(得分:0)

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

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

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

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

但继承的真正用法是每个对象都应该知道它们属于哪个类,并在它们的类中使用该方法。如果您依赖于继承体系结构中的type属性,那么您实际上并没有充分利用继承权。