網站搜尋

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 方法對已實例化的對象是不可見的。