>

아래와 같이 유형 속성이 다른 클래스에 의해 정의 된 여러 유형의 객체가있는 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

    이 예에서 type 에 이름 충돌이 있기 때문에 수퍼 클래스에 세터가 있어야합니다.  필드

    export class Fruit {
      name: string;
      type: string;
      constructor(columnName: string) {
        this.name = columnName;
      }
      set type(type){
        this.type = type;
      }
    }
    
    
    그러나 상속의 실제 사용법은 모든 객체가 자신이 속한 클래스를 알고 클래스에서 메소드를 사용해야한다는 것입니다. 당신이 type 에 의존하는 경우  상속 아키텍쳐의 속성은 실제로 상속의 완전한 힘을 사용하지 않습니다.

관련 자료

  • 이전 r - 3D 플롯이 보이지 않음
  • 다음 node.js - nodejs에서 첨부 파일을 사용하여 이메일을 보내는 방법은 무엇입니까?