在Typescript中类的公共访问修饰符的目的是什么?

时间:2016-10-07 05:18:45

标签: typescript

Typescript中的类的公共访问修饰符的用途是什么?

之间有什么区别
export class Thing {

  public doStuff(){}

}

export class Thing {

  doStuff(){}

}

似乎标准的tsc JS输出完全相同......

3 个答案:

答案 0 :(得分:0)

这只是将方法设置为public的明确方法。默认情况下,TypeScript中的所有类方法/属性都是public类型,但为了清楚起见,您也可以在代码中注意这一点。

您可以在Handbook中详细了解相关内容,以下是摘录:

  

默认公开

     

在我们的示例中,我们已经能够自由访问我们在整个程序中声明的成员。如果你熟悉其他语言的课程,你可能已经注意到在上面的例子中我们不必使用public这个词来实现这个目的;例如,C#要求将每个成员明确标记为public以使其可见。在TypeScript中,默认情况下每个成员都是公共的。

     

您仍然可以明确标记成员公开。

答案 1 :(得分:0)

您的示例代码在TypeScript中意味着完全相同。如果您未在成员定义中添加修饰符publicprivateprotected,则TypeScript将选择默认值public

这对Javascript没有意义,因为TypeScript转换器将生成完全相同的代码。但是这些修饰符将帮助您封装您的类成员并使其成为:

  • 可在课堂外访问:public
  • 只能在班级中访问:private
  • 可在类和派生类中访问:protected

再次生成的Javascript将不包含修饰符。这意味着,如果有人获得您的Javascript代码,即使您将其定义为private,也会访问这些成员。修饰符仅在TypeScript中有用,并帮助开发人员不访问某些类成员。

答案 2 :(得分:0)

使用public的两个原因,一个是主观/风格,另一个是目的:

  1. 这是代码内文档。忘记使用访问修饰符 即可。 (这是主观/风格上的原因。)

  2. 如果要使用TypeScript添加到类构造函数的速记初始化功能,则需要public来告诉TypeScript这样做。

这里是#2的示例:

class Example {
    constructor(public name: string) {
//              ^^^^^^---------------- This is what triggers the feature
    }
}
const e = new Example("Joe");
console.log(e.name); // "Joe"

On the playground。)