为什么在angular4中将下划线添加到typescript类的字段?

时间:2017-07-18 12:44:43

标签: angular typescript intellij-idea

我正在构建 Angular4 项目并使用 IntelliJ 。每当我创建一个新课程,然后添加 getters setters 。 IDE会向字段添加下划线。

由于这种打字稿语法似乎被IDE自动识别并以这种方式创建字段,让我认为这是一种最佳实践,但我也读过这不应该这样做。

为什么IDE会这样做?我是否应该允许它为角度项目执行此操作?谢谢你的帮助!

在创建getter和setter之前

export class Test {


  hello:string;
  world:string;


}

创建getter和setter之后

export class Test {


  private _hello:string;
  private _world:string;

  get hello(): string {
    return this._hello;
  }

  set hello(value: string) {
    this._hello = value;
  }

  get world(): string {
    return this._world;
  }

  set world(value: string) {
    this._world = value;
  }
}

2 个答案:

答案 0 :(得分:17)

getter / setter不能具有与属性名称匹配的名称 - 以下内容不起作用:

class A {
   get world() {
      return this.world;
   }
}

因此,一般模式是仅使用下划线版本将内部属性命名为setter / getter:

class A {
   get world() {
      return this._world;
   }
}

由于JS因此缺乏运行时封装,因此下划线通常表示内部/私有/封装的属性/变量。

但没有什么能迫使你使用下划线。如果您以不同方式命名getter / setter,则可以避免添加下划线:

class A {
   get getWorld() {
      return this.world;
   }
}   

答案 1 :(得分:1)

您可以为Settings | Editor | Code Style | TypeScript | Code GenerationNaming conventions/Field prefix中的字段指定不同的前缀。但请注意,将前缀留空将导致TS2300:Duplicate identifier错误