可以在TypeScript类中创建私有"函数"(方法)吗?假设我们有以下Person.ts个TypeScript文件:

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;
})();

观察

我本以为whisper函数会在闭包中声明,但不会在原型上声明?本质上,这使得whisper函数在编译时是公开的?

推荐答案

TypeScript public/private关键字只适用于TypeScript判断代码的方式——它们对JavaScript输出没有任何影响.

根据the language specification(第9-10页):

私密可视性是一种设计时构造;这是在战争期间强制执行的

这个问题已经在这里得到了回答:https://stackoverflow.com/a/12713869/1014822

Update:这个古老的答案仍然获得了大量的流量,因此值得注意的是,除了上面的语言规范链接之外,关于类的TypeScript handbook章节还详细介绍了公共、私有和(现在)受保护的成员.

2018 Update

2020 Update

Private methods已进入TC39工作组的第3阶段.对于TypeScript,例如here,该功能目前正在积极讨论中.

Typescript相关问答推荐

Angular 17 -如何在for循环内创建一些加载?

为什么从数组中删除一个值会删除打字错误?

对深度对象键/路径进行适当的智能感知和类型判断,作为函数参数,而不会触发递归类型限制器

键集分页顺序/时间戳上的筛选器,精度不相同

泛型函数中输入参数类型的推断问题

如何按不能保证的功能过滤按键?

PrimeNG日历需要找到覆盖默认Enter键行为的方法

是否存在类型联合的替代方案,其中包括仅在某些替代方案中存在的可选属性?

类型脚本可以推断哪个类型作为参数传递到联合类型中吗?

类型推断对React.ForwardRef()的引用参数无效

在TypeScript中扩展重载方法时出现问题

类型脚本-在调用期间解析函数参数类型

Angular NG8001错误.组件只能在一个页面上工作,而不是在她的页面上工作

三重融合视角与正交阵

如何在Deno中获取Base64图像的宽/高?

定义一个只允许来自另一个类型的特定字符串文字的类型的最佳方式

如何在Vuetify 3中导入TypeScript类型?

React中的效果挂钩在依赖项更新后不会重新执行

有没有一种简单的方法可以访问Keyboard Shortcuts JSON文件中列出的每个命令的显示名称(标题)?

可选通用映射器函数出错