這是一個有趣的問題。只讀屬性的概念在TypeScript中與其他語言略有不同。
在許多語言中,如果您嘗試設置屬性,但使用getter(但不設置setter)的屬性會引發編譯器錯誤,但TypeScript不會。
該屬性仍是隻讀的,因爲如果嘗試設置它,則不會產生任何影響;該集將失敗默默。
這裏是沒有任何接口的例子:
class Example {
get name() {
return 'Steve';
}
}
var y = new Example();
y.name = 'Example 2';
alert(y.name);
沒有編譯器警告,當我使用x.name = 'Example 2';
。
如果有是一個編譯器警告,我後來希望有一種方法來指定接口內屬性的只讀性。正如你所期望的,鑑於上述信息,你不能在接口上設置只讀屬性。
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);
這意味着你只能通過有一個方法來獲得(即允許它進行設置,顯然都沒法)的財產的價值強制執行只讀的煩躁。
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());
對這個問題缺乏活動感到驚訝。只讀屬性非常有用,也是我試圖在TypeScript中實現的第一個模式之一。 – gravidThoughts 2015-04-16 18:19:44