在TypeScript中的私有“函数”

是否有可能在TypeScript类中创build一个私有的“函数”(方法)? 假设我们有以下Person.ts文件:

 class Person { constructor(public firstName: string, public lastName: string) { } public shout(phrase: string) { alert(phrase); } private whisper(phrase: string) { console.log(phrase); } } 

编译时正在转换为以下内容:

 var Person = (function () { function Person(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; } Person.prototype.shout = function (phrase) { alert(phrase); }; Person.prototype.whisper = function (phrase) { console.log(phrase); }; return Person; })(); 

意见

我期待在闭包中声明whisperfunction,但不是在原型上? 从本质上讲,编译时公开的whisperfunction?

TypeScript public / private关键字仅适用于TypeScript检查代码的方式 – 它们对JavaScript输出没有任何影响。

根据语言规范 (第9-10页):

私人可视性是一个devise时间构造; 它在静态types检查过程中被强制执行,但并不意味着任何运行时执行。 TypeScript在devise时强制实现类的封装(通过限制私有成员的使用),但不能在运行时强制封装,因为所有的对象属性都可以在运行时访问。 未来的JavaScript版本可能会提供专用名称,从而可以启用私有成员的运行时执行

这已经被问及在这里回答: https : //stackoverflow.com/a/12713869/1014822

更新:这个旧的答案仍然会获得大量的stream量,所以值得注意的是,除了上面的语言规范链接之外,公共,私有和(现在)保护的成员在类的TypeScript 手册章节中都有详细介绍。

在JavaScript(而不是TypeScript),你不能有一个私人的“成员”function。

如果在闭包中定义了一个私有函数,那么您将无法在类的实例中将其作为实例方法调用。

如果这就是你想要的,只要将TypeScript函数定义移到类体外。