TypeScript中的私有静态属性

Mur*_*nze 16 typescript

如果我在下面做这样的事情,我该如何在课堂上访问该房产?

class Person
{
    private static name: string;
}

console.log(Person.name);
Run Code Online (Sandbox Code Playgroud)

难道不应该无法进入吗?

小智 16

这应该是一个错误,但不是.从规范8.2.1节:

无法指定静态的可访问性 - 它们实际上始终是公共的.

关于静力学的可访问性修饰符是团队过去考虑过的.如果你有一个强大的用例,你应该在codeplex网站上提出这个问题!

  • 当然可以指出私有静态的*intent* - 如果您尝试访问包含类之外的私有静态字段,则会出现编译错误.根据规范:"私有和受保护的可访问性仅在编译时强制执行,仅作为意图的指示". (6认同)

小智 6

class Person
{
    private static theName: string = "John";
    static get name():string{
        return Person.theName;
    }
}

console.log(Person.name);
Run Code Online (Sandbox Code Playgroud)

如果静态属性是私有的,我们需要提供静态 get 方法来访问它。这可能不是一个常见的解决方案,但这是我所知道的直接访问私有静态属性的唯一方法。另一方面,如果您还打算从实例化对象访问该属性,则可能必须添加第二个 get 方法。两个 get 方法可以具有相同的名称,因为静态 get 方法对于实例化对象来说是不可见的。