В TypeScript методы получения и установки используются для обеспечения контролируемого доступа к свойствам класса. Они позволяют вам определять собственную логику при получении или установке значения свойства. Вот несколько рекомендаций по использованию геттеров и сеттеров в TypeScript, а также примеры кода:
- Использовать модификаторы доступа. Рекомендуется использовать модификаторы доступа (
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.');
}
}
}
-
Соглашение об именах. По соглашению, перед частным полем резервного копирования обычно ставится подчеркивание (
_), чтобы отличить его от общедоступного свойства. Это помогает избежать конфликтов имен. -
Избегайте дорогостоящих операций: методы получения и установки следует использовать для простых операций и не должны выполнять дорогостоящие вычисления. Следует избегать дорогостоящих операций, поскольку они могут повлиять на производительность.
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;
}
}
- Использовать геттеры только для чтения. Если вы хотите предоставить доступ к свойству только для чтения, вы можете определить геттер без соответствующего сеттера. Это предотвращает изменение свойства внешним кодом.
class Example {
private _value: number;
get value(): number {
return this._value;
}
}
- Использовать инициализацию свойства. Вы можете инициализировать резервное поле свойства непосредственно в определении класса, чтобы предоставить начальное значение.
class Example {
private _value: number = 0;
get value(): number {
return this._value;
}
set value(newValue: number) {
this._value = newValue;
}
}