Как сделать сеттер необязательным в Typescript? - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть класс, предназначенный для представления значения на экране:

export class Category() {
  constructor() {}
  private _name?: string;
  private _viewValue?: string;

  get name() {
    return this._name;
  }
  set name(value: string) {
    this._name = value;
    this._viewValue = getViewValue(name);
  }
  get viewValue() {
    return this._viewValue;
  }
  set viewValue (value: string) {
    this._viewValue = value;
  }
}

function getViewValue(value: string): string {
  switch (value) {
    case 'a1': {
      return 'A1';
    }
    case 'a1': {
        return 'A2';
    }
  }
}

Однако, когда я пытаюсь установить эти значения, мне необходимо установить значение для свойства viewValue. То, что я хочу сделать, это сделать set viewValue(value) необязательным, как я мог сделать с _name и _value.

Я пытался уже делать set? viewValue(value), set viewValue?(value) и set viewValue(value)? но никто из них не работает

И я, конечно, могу заставить установщик viewValue просто ничего не делать, но действительно ли невозможно сделать набор необязательным?

1 Ответ

1 голос
/ 20 февраля 2020

Только не пишите сеттер. Но category.viewValue = '' выдаст ошибку. Вы можете использовать свойство publi c viewValue без метода получения / установки.

Существуют различные типы дескрипторов свойств (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty). Вы не можете смешивать данные и дескрипторы доступа.

export class Category() {
  constructor() {}
  private _name?: string;

  viewValue?: string;

  get name() {
    return this._name;
  }

  set name(value: string) {
    this._name = value;
    this.viewValue = getViewValue(name);
  }
}
...