#符号在TypeScript类中是什么意思?

时间:2020-03-31 22:40:45

标签: typescript typescript-typings

例如,如果我有此类:

type Url: string;

class A {
   #url: Url
}

#符号代表什么?谢谢!

2 个答案:

答案 0 :(得分:3)

这是ECMAScript private field,是TypeScript 3.8的新功能。可以从类内部的方法访问该字段,但不能从类外部的方法访问。

更多信息:

文档中的示例:

class Animal {
    #name: string;
    constructor(theName: string) { this.#name = theName; }
}

new Animal("Cat").#name; // Property '#name' is not accessible outside class 'Animal' because it has a private identifier.

答案 1 :(得分:1)

为了补充jtbandes answer,TypeScript private类成员关键字只是语法糖,作用于 type级别(TypeScript编译器)。在运行时中,private类成员实际上是 public 。我们可以在类中使用Object.assign(this, { field: value })来查看它,该类可以与TypeScript private字段一起使用,而不能与# (EcmaScript private)字段一起使用。

TypeScript团队需要同时保留两种语法和两种行为,以免破坏现有的TypeScript代码库。作为开发人员,我们可以在两种语法之间进行选择:

  • ECMAScript private更严格,但可能还不够受支持。也许是为了实施公共API或使用混合代码库JavaScript / TypeScript。
  • TypeScript private更常见,尤其是因为它与Java和C#中的语法相同。现在对于一个完整的TypeScript代码库(不是公开的)而言已经足够了。但是由于TypeScript的目的是向ECMAScript融合,所以现在就开始使用这种新语法可能是一个好习惯。