Лучшие практики использования геттеров и сеттеров в TypeScript

В TypeScript методы получения и установки используются для обеспечения контролируемого доступа к свойствам класса. Они позволяют вам определять собственную логику при получении или установке значения свойства. Вот несколько рекомендаций по использованию геттеров и сеттеров в TypeScript, а также примеры кода:

  1. Использовать модификаторы доступа. Рекомендуется использовать модификаторы доступа (public, privateили protected) с методами получения и установки. методы для обеспечения инкапсуляции и управления доступом к свойству.
class Example {
  private _value: number;
  get value(): number {
    return this._value;
  }
  set value(newValue: number) {
    if (newValue >= 0) {
      this._value = newValue;
    } else {
      throw new Error('Value must be non-negative.');
    }
  }
}
  1. Соглашение об именах. По соглашению, перед частным полем резервного копирования обычно ставится подчеркивание (_), чтобы отличить его от общедоступного свойства. Это помогает избежать конфликтов имен.

  2. Избегайте дорогостоящих операций: методы получения и установки следует использовать для простых операций и не должны выполнять дорогостоящие вычисления. Следует избегать дорогостоящих операций, поскольку они могут повлиять на производительность.

class Example {
  private _data: number[];
  get average(): number {
    let sum = 0;
    for (const value of this._data) {
      sum += value;
    }
    return sum / this._data.length;
  }
  set data(newData: number[]) {
    if (newData.length === 0) {
      throw new Error('Data must not be empty.');
    }
    this._data = newData;
  }
}
  1. Использовать геттеры только для чтения. Если вы хотите предоставить доступ к свойству только для чтения, вы можете определить геттер без соответствующего сеттера. Это предотвращает изменение свойства внешним кодом.
class Example {
  private _value: number;
  get value(): number {
    return this._value;
  }
}
  1. Использовать инициализацию свойства. Вы можете инициализировать резервное поле свойства непосредственно в определении класса, чтобы предоставить начальное значение.
class Example {
  private _value: number = 0;
  get value(): number {
    return this._value;
  }
  set value(newValue: number) {
    this._value = newValue;
  }
}