У меня есть класс, который содержит частное свойство, которое является массивом. Существует общедоступный геттер и сеттер, чтобы гарантировать, что манипулирование данными запускает необходимую бизнес-логику.
Я столкнулся с проблемой, когда вызывающая сторона смогла установить частное свойство без запуска соответствующей логики, содержащейся в общедоступном установщике.
Я воспроизвел проблему с помощью этого простого кода:
class Greeter {
private _greetings: string[];
constructor () {}
set greetings(greetings: string[]) {
let newGreetings: string[] = [];
for (let i: number = 0; i < greetings.length; i++) {
newGreetings.push("setter_" + greetings[i] )
}
this._greetings = newGreetings;
}
get greetings() {
return this._greetings;
}
}
let greeter = new Greeter();
greeter.greetings = ["test"];
let test1 = document.createElement('p');
test1.textContent = greeter.greetings[0];
document.body.appendChild(test1);
greeter.greetings[0] = "test";
let test2 = document.createElement('p');
test2.textContent = greeter.greetings[0];
document.body.appendChild(test2);
Чтобы просмотреть код на игровой площадке TS, перейдите по ссылке ниже:
У меня вопрос: я что-то не так делаю? Это предполагаемое поведение? Или это больше проблема с компилятором машинописного текста, который не должен позволять компилировать этот код?