https://qiita.com/suin/items/fafc81be5a7222648863

この投稿は、TypeScriptの古くからあるソフトプライベートと、TypeScript 3.8で導入されたハードプライベートを対比し説明していくものです。

この投稿で学べること

ソフトプライベートとハードプライベート

このセクションでは、ソフトプライベートとは何なのか? ハードプライベートとは何なのか? についての基本的なことを説明します。

ソフトプライベートとは?

ソフトプライベート(soft-private)とは、privateアクセス修飾子でオブジェクトのプロパティの可視性を表現する書き方のことです。

class Foo {
  private name: string
}

このprivateキーワードは、TypeScript固有の仕様で、ECMAScriptには無いものです。

ハードプライベートとは?

ハードプライベート(hard-private)とは、#でオブジェクトのプロパティの可視性を表現する書き方のことです。

class Foo {
  #name: string
}

これは、今後ECMAScriptに盛り込まれることが見込まれる「Class fields」(stage 3)の言語仕様の一部をTypeScriptに取り入れたものです。なので、TypeScript固有の仕様ではなく、JavaScriptと共有する仕様となっています。

TypeScriptにおいては、3.8で導入された仕様です。

TypeScriptコンパイラは、このECMAScript Private Fields構文を、ES2015に対応している環境なら動くようなJSコードにトランスパイルしてくれるので、最新じゃないブラウザでも動かすことができます。ちなみに、JavaScriptとして、Private Fieldsを動かせる環境は、まだ出揃っておらず、FirefoxやSafariでは動きません: