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

Dan*_*Dan 16 intellij-idea typescript angular

我正在构建一个Angular4项目并使用IntelliJ.每当我创建一个新类,然后添加gettersetter.IDE会向字段添加下划线.

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

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

在创建getter和setter之前

export class Test {


  hello:string;
  world:string;


}
Run Code Online (Sandbox Code Playgroud)

创建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;
  }
}
Run Code Online (Sandbox Code Playgroud)

Max*_*kyi 20

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

class A {
   get world() {
      return this.world;
   }
}
Run Code Online (Sandbox Code Playgroud)

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

class A {
   get world() {
      return this._world;
   }
}
Run Code Online (Sandbox Code Playgroud)

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

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

class A {
   get getWorld() {
      return this.world;
   }
}   
Run Code Online (Sandbox Code Playgroud)

  • 好的,谢谢,但我不得不说,这很烦人,因为这意味着在我的休息服务的API级别,我必须在开头用_命名所有字段,以便反序列化过程正确发生.这不是java中用于api的语言的最佳实践. (4认同)
  • 我也发现,也许最好的解决方案可能根本不会触及打字稿代码,但在(在java的情况下)使用jackson库并使用@JsonProperty批注来定义json属性以及它应该如何映射到a java bean字段.我认为这就是我们如何为我们的情况解决问题......这是一个解释这一问题的小例子./sf/ask/880854691/ ....这样后端开发人员可以很开心前端民间:) (3认同)