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では動きません: