首页 > 解决方案 > TypeScript 定义文件中#private 的目的是什么?

问题描述

在 TypeScript 4.0.5 中,当转译一个使用 ECMAScript 私有字段的类时,如下所示:

export class Test {
    #foo = 'foo';
    #bar = 6;

    concat() {
        return this.#foo + this.#bar;
    }
}

结果是这样的:

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 _foo, _bar;
export class Test {
    constructor() {
        _foo.set(this, 'lol');
        _bar.set(this, 6);
    }
    concat() {
        return __classPrivateFieldGet(this, _foo) + __classPrivateFieldGet(this, _bar);
    }
}
_foo = new WeakMap(), _bar = new WeakMap();

定义文件是这样的:

export declare class Test {
    #private;
    concat(): string;
}

来这里的目的是#private什么?它只是删除了 TypeScript 的向后兼容性。该#字符将使旧 TypeScript 版本中的解析失败,并且不会在 IDE 中带来任何内容:

尝试访问#foo

当我们尝试使用该#private字段时,它没有显示任何有用的信息:

尝试访问#private

我在这里找到了相应的提交:https ://github.com/microsoft/TypeScript/pull/30829/commits/3f8b49012636a365762598847a463f1cf189a59f但评论和提交消息都没有帮助我理解。

标签: typescriptprivate

解决方案


推荐阅读