【发布时间】: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.b或a['b']。 -
如果它只是用于单元测试,为什么不将
a转换为any类型? -
@jonrsharpe typescript 为私有属性添加了 polyfill,你已经可以使用它们了typescriptlang.org/docs/handbook/release-notes/…
-
@AlekseyL。哦,有趣,感谢您指出这一点。我想知道在定位最近的运行时时,它们是否可能会被用于
private字段上的 输出,听起来这不是他们的发展方向。 -
还有一件事在这里没有提到但可能应该:通过公共 API 测试 行为;想要访问私有(
private或#)字段和方法表明存在设计问题。
标签: typescript access-modifiers private-members