TypeScript3.8以降のECMAScript private fieldについて
現状targetがesnextじゃないならあまり使わないほうがよい
Reason
以下のようなシンプルなケースを考える。
class A { #field = 1; something() {return this.field;} }
target
がesnext
以外だと
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) { if (!privateMap.has(receiver)) { throw new TypeError("attempted to get private field on non-instance"); } return privateMap.get(receiver); }; var _field; class A { constructor() { _field.set(this, 1); } something() { return __classPrivateFieldGet(this, _field); } } _field = new WeakMap();
というアウトプットになる。
privateフィールドを実現するためにWeakMap
を活用しており、アクセスのたびにWeakMap
を検索するためとにかく遅い。
そのため、よほどの理由がない限り(多分ほぼ無い)使うべきではない(現状はね)