Ich habe eine Klasse, die eine private Eigenschaft enthält, die ein Array ist. Es gibt einen öffentlichen Getter und Setter, um sicherzustellen, dass die Datenmanipulation die erforderliche Geschäftslogik auslöst.Das Aufrufen des öffentlichen Typs "Typoskript" ändert die private Eigenschaft, ohne die im Öffentlichen Setter enthaltene Logik auszuführen
Ich stieß auf ein Problem, wenn ein Aufrufer in der Lage war, die private Eigenschaft festzulegen, ohne die zugehörige Logik auszuführen, die im öffentlichen Setter enthalten ist.
ich das Problem mit diesem einfachen Code reproduziert:
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);
Um den Code in TS Spielplatz, folgen Sie dem Link unten zu sehen:
Meine Frage ist: Bin ich etwas zu tun falsch? Ist das das beabsichtigte Verhalten? Oder ist das eher ein Problem mit dem Typskript-Compiler, der diesen Code nicht kompilieren sollte?
Welcher Teil ist speziell unerwartet? –
Ich würde erwarten, dass in beiden Fällen der Wert sein wird: setter_test – user1769949