TypeScript 中的私有靜態屬性
如果我像下面這樣做,我要如何在類別外存取這個屬性?
class Person
{
private static name: string;
}
console.log(Person.name);
難道它不應該是無法訪問的嗎?
答案#1
這本應該是錯誤,但卻不是。根據規範,第8.2.1節:
無法指定靜態成員的可訪問性——它們實際上總是公共的。
靜態成員的可存取性修飾詞是團隊過去曾考慮過的。如果你有很強的使用案例,你應該在 CodePlex 網站上提出這個問題!
答案#2
class Person
{
private static theName: string = "John";
static get name():string{
return Person.theName;
}
}
console.log(Person.name);
如果一個靜態屬性是私有的,我們需要提供一個靜態的 get 方法來訪問它。這可能不是一個常見的解決方案,但它是我所知道的直接訪問私有靜態屬性的唯一方法。另一方面,如果你也打算從已實例化的對象訪問該屬性,你可能需要再添加第二個 get 方法。兩個 get 方法可以使用相同的名稱,因為靜態的 get 方法對已實例化的對象是不可見的。
