【发布时间】:2012-09-24 16:27:49
【问题描述】:
我正在研究 TypeScript 中私有成员的实现,我发现它有点令人困惑。 Intellisense 不允许访问私有成员,但在纯 JavaScript 中,它就在那里。这让我觉得 TS 没有正确实现私有成员。 有什么想法吗?
class Test{
private member: any = "private member";
}
alert(new Test().member);
【问题讨论】:
-
您想知道为什么 IntelliSense 没有在带有 alert() 的行中为您提供私有成员?
-
不。我想知道为什么 TS 有一个私有的,而这只是智能感知的糖,而不是它编译成的 JavaScript。在typescriptlang.org/Playground 中执行的这段代码会提醒私有成员值。
-
如前所述,您必须将项目声明为私有上下文中的变量以使其私有。我猜打字稿不会这样做,因为它与添加到原型相比效率低下。它还与类型定义混淆(私有成员实际上不是类的一部分)
-
如果你想要原型上存在真正的私有变量,确实需要一些开销,但我已经编写了一个名为 ClassJS 的库,它在 GitHub 上就是这样做的:github.com/KthProg/ClassJS。
-
值得注意的是,这些天 typescript 支持 javascript 提出的
#privateClassFields
标签: javascript typescript