理解打字稿类中的"公共"/"私人"

ref*_*tor 8 typescript

在下面的类型脚本代码中,无论名称是"public"还是"private",生成的java脚本代码都是相同的.

所以我的问题是,如何确定构造函数参数何时应该是公共参数还是私有参数?

// typescript code
class Animal {  
constructor( public name: string) {     
}

}

// generated JS code
var Animal = (function () {
function Animal(name) {
    this.name = name;
}
return Animal;
}());
Run Code Online (Sandbox Code Playgroud)

Jos*_*ker 13

正如您所发现的,public、private、protected 访问修饰符实际上并不影响最终输出的代码。他们影响的类型是在编译时检查。

他们实际上是做什么的?

顾名思义,publicprivate修饰符限制了可以访问类成员的内容。他们也是氏族中的第三个修饰符,protected

私人改性剂只允许一个类的成员(变量或方法)将被访问该类别内

保护的修饰符允许的一切private修改器,并且还允许继承了该类其他类使用它。

最后,public修饰符使得任何可以访问该类的东西也可以访问 public 类属性。

有关更深入的解释和示例,请查看官方 TypeScript 手册的解释

如果它都编译相同,我为什么要使用修饰符?!

使用修饰符将使编译器能够确保您的代码没有使用它不应该使用的东西。这与首先​​使用类型背后的原因是相同的,它使犯一开始不应该犯的错误变得更加困难!作为一个额外的好处,如果您的文本编辑器支持 TypeScript,它还会在显示变量和方法的自动完成值时使用访问修饰符。


bas*_*rat 7

生成的java脚本代码是相同的

它们生成相同的JavaScript,但就类型而言,它们没有相同的语义.

private成员只能从课堂内访问,而public可以从外部访问.

更多

这里的差异包括:https://basarat.gitbooks.io/typescript/content/docs/classes.html#access-modifiers

另一个例子

let foo = 123;
Run Code Online (Sandbox Code Playgroud)

将生成与之相同的ES5

const foo = 123; 
Run Code Online (Sandbox Code Playgroud)

但是在第一种情况下let foo = 123;foo = 456编译正常但const foo = 123; foo = 456会导致编译时错误.