【问题标题】:How to access private property (with prefix # syntax) in TypeScript如何在 TypeScript 中访问私有属性(带有前缀 # 语法)
【发布时间】:2020-09-05 05:46:38
【问题描述】:

如何访问 TypeScript 中由前缀 # 符号表示的类的私有属性。 我需要它来进行单元测试。

class A {
    #pr: number;
    pu: number
    constructor(pr: number, pu: number) {
        this.#pr = pr;
        this.pu = pu;
    }
}

let a = new A(10, 9);

console.log(a.pu, a.#pr);

试过了,console.log(a.pu, a["#pr"]); 但没有成功。

【问题讨论】:

  • TypeScript 将使用 private pr: number;# 私有属性仍然只是 TC39 的第 3 阶段(请参阅 github.com/tc39/proposal-class-fields)。事实上,使用 TypeScript 你可以编写整个类class A { constructor(private pr: number, public pu: number) { } }。另请注意,您不能像在 JS 或 TS 中那样混合点和括号表示法,它是 a.ba['b']
  • 如果它只是用于单元测试,为什么不将a 转换为any 类型?
  • @jonrsharpe typescript 为私有属性添加了 polyfill,你已经可以使用它们了typescriptlang.org/docs/handbook/release-notes/…
  • @AlekseyL。哦,有趣,感谢您指出这一点。我想知道在定位最近的运行时时,它们是否可能会被用于 private 字段上的 输出,听起来这不是他们的发展方向。
  • 还有一件事在这里没有提到但可能应该:通过公共 API 测试 行为;想要访问私有(private#)字段和方法表明存在设计问题。

标签: typescript access-modifiers private-members


【解决方案1】:

目前无法访问甚至检测到(非填充)私有字段的使用。这使他们硬私有

你可以阅读this proposal discussion中的一些推理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 2021-08-24
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    相关资源
    最近更新 更多