Dies ist eine interessante Frage. Das Konzept einer schreibgeschützten Eigenschaft unterscheidet sich in TypeScript subtil von anderen Sprachen.
In vielen Sprachen würde eine Eigenschaft mit einem Getter (aber ohne Setter) einen Compilerfehler auslösen, wenn Sie versuchen, die Eigenschaft zu setzen, aber TypeScript nicht.
Die Eigenschaft ist immer noch schreibgeschützt, da es keinen Unterschied macht, wenn Sie versuchen, sie festzulegen. Das Set wird im Hintergrund ausfallen. Hier
ist ein Beispiel ohne Schnittstellen:
class Example {
get name() {
return 'Steve';
}
}
var y = new Example();
y.name = 'Example 2';
alert(y.name);
Es gibt keine Compiler-Warnung, wenn ich x.name = 'Example 2';
verwenden.
Wenn dort war eine Compiler-Warnung, würde ich später erwarten, dass es eine Möglichkeit gibt, die Readonly-Ness einer Eigenschaft innerhalb einer Schnittstelle anzugeben. Wie Sie jedoch erwarten können, können Sie aufgrund der obigen Informationen keine schreibgeschützte Eigenschaft für eine Schnittstelle festlegen.
interface Test {
name: string;
}
class Example {
get name() {
return 'Steve';
}
}
var x: Test = new Example();
x.name = 'Example 1';
alert(x.name);
var y = new Example();
x.name = 'Example 2';
alert(x.name);
Dies bedeutet, dass Sie nur eine Methode, indem man den Wert der Eigenschaft (und offensichtlich keine Methode, die es gesetzt werden kann) bekommen Read-only-ness erzwingen können.
interface Test {
getName:() => string;
}
class Example {
getName() {
return 'Steve';
}
}
var x: Test = new Example();
//x.getName('Obviously not');
//x.getName() = 'Obviously not';
alert(x.getName());
var y = new Example();
//y.getName('Obviously not');
//y.getName() = 'Obviously not';
alert(y.getName());
Wirklich überrascht über den Mangel an Aktivität für diese Frage. Schreibgeschützte Eigenschaften sind unglaublich nützlich und eines der ersten Muster, das ich in TypeScript zu implementieren versuchte. – gravidThoughts