To interesujące pytanie. Pojęcie właściwości tylko do odczytu jest nieco inne w TypeScript w innych językach.
W wielu językach właściwość z programem pobierającym (ale bez ustawiacza) spowodowałaby błąd kompilatora przy próbie ustawienia właściwości, ale TypeScript tego nie robi.
Właściwość jest nadal tylko do odczytu, ponieważ nie ma znaczenia, jeśli spróbujesz ją ustawić; zestaw nie powiedzie się po cichu.
Oto przykład bez żadnych interfejsów:
class Example {
get name() {
return 'Steve';
}
}
var y = new Example();
y.name = 'Example 2';
alert(y.name);
Nie ma ostrzeżenie kompilatora kiedy używam x.name = 'Example 2';
.
Jeśli był ostrzeżenie kompilatora, będę następnie oczekiwać, że istnieje sposób określania readonly-ness właściwość w interfejsie. Jak można się jednak spodziewać, biorąc pod uwagę powyższe informacje, nie można ustawić właściwości tylko do odczytu na interfejsie.
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);
Oznacza to, że można tylko egzekwować readonly-ności poprzez metodę, aby uzyskać wartość właściwości (i oczywiście nie ma metody, która pozwala mu być ustawione).
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());
Naprawdę zaskoczony brakiem aktywności na to pytanie. Właściwości tylko do odczytu są niezwykle użyteczne i są jednym z pierwszych wzorców, które próbowałem zastosować w języku TypeScript. – gravidThoughts