Questa è una domanda interessante. Il concetto di una proprietà readonly è sottilmente differente in TypeScript in altre lingue.
In molte lingue una proprietà con un getter (ma senza setter) genera un errore del compilatore se si tenta di impostare la proprietà, ma TypeScript no.
La proprietà è ancora in sola lettura, perché non fa alcuna differenza se si tenta di impostarla; l'insieme fallirà silenziosamente.
Ecco un esempio, senza alcuna interfaccia:
class Example {
get name() {
return 'Steve';
}
}
var y = new Example();
y.name = 'Example 2';
alert(y.name);
Non v'è alcun avviso del compilatore quando uso x.name = 'Example 2';
.
Se era un avvertimento del compilatore, successivamente mi aspetto che ci sia un modo per specificare la capacità di sola lettura di una proprietà all'interno di un'interfaccia. Come ci si aspetterebbe, date le informazioni di cui sopra, non è possibile impostare una proprietà readonly su un'interfaccia.
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);
Questo significa che si può applicare solo in sola lettura-ness di avere un metodo per ottenere il valore della proprietà (e, ovviamente, nessun metodo che gli permette di essere impostata).
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());
Davvero sorpreso dalla mancanza di attività per questa domanda. Le proprietà di sola lettura sono incredibilmente utili e uno dei primi modelli che ho provato ad implementare in TypeScript. – gravidThoughts