web-dev-qa-db-ja.com

angle4のTypeScriptクラスのフィールドにアンダースコアが追加されるのはなぜですか?

私はAngular4プロジェクトを構築し、IntelliJを使用しています。新しいクラスを作成し、getterssettersを追加するたびに。 IDEは、フィールドにアンダースコアを追加します。

TypeScript構文はIDEによって自動的に認識され、まだこのようにフィールドを作成しているように思えるので、これはベストプラクティスであると考えさせられますが、終わり。

IDEがこれを行うのはなぜですか?そして、angularプロジェクトに対してこれを行うことを許可する必要がありますか?助けてくれてありがとう!

ゲッターとセッターを作成する前に

export class Test {


  hello:string;
  world:string;


}

ゲッターとセッターを作成した後

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;
  }
}
14
Dan

ゲッター/セッターにプロパティ名と一致する名前を付けることはできません-以下は機能しません:

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

したがって、一般的なパターンは、アンダースコアのエディションのみでセッター/ゲッターのように内部プロパティに名前を付けることです。

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

JS、したがってTSにはランタイムカプセル化がないため、通常、アンダースコアは内部/プライベート/カプセル化されたプロパティ/変数を示します。

しかし、アンダースコアの使用を強制するものは何もありません。ゲッター/セッターに別の名前を付ける場合は、アンダースコアを追加しないでください:

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

Settings | Editor | Code Style | TypeScript | Code GenerationNaming conventions/Field prefixのフィールドに使用する別のプレフィックスを指定できます。ただし、プレフィックスを空のままにすると、TS2300:Duplicate identifierエラーが発生することに注意してください

1
lena