abcdefGets

ゲッツ!

TypeScript3.8以降のECMAScript private fieldについて

現状targetがesnextじゃないならあまり使わないほうがよい

Reason

以下のようなシンプルなケースを考える。

class A {
  #field = 1;
  something() {return this.field;}
}

targetesnext以外だと

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を検索するためとにかく遅い。

そのため、よほどの理由がない限り(多分ほぼ無い)使うべきではない(現状はね)