在以下类型的脚本代码中,无论名称是“公共”还是 “private”,生成的java脚本代码相同。
所以我的问题是,如何决定构造函数参数应该是什么时候 公共还是私人?
// typescript code
class Animal {
constructor( public name: string) {
}
}
// generated JS code
var Animal = (function () {
function Animal(name) {
this.name = name;
}
return Animal;
}());
答案 0 :(得分:6)
生成的java脚本代码相同
它们生成相同的JavaScript,但就类型而言,它们没有相同的语义。
if let path = NSBundle.mainBundle().pathForResource("Property List", ofType: "plist") {
dict = NSDictionary(contentsOfFile: path)
if let vanuatu = dict.objectForKey("australia") as? [String:AnyObject]{
if let vanuatuArray = vanuatu["vanuatu"] as? [String]{
print(vanuatuArray[1])
}
}
}
成员只能在课堂内访问,而private
可以在外部访问。
这里有不同之处:https://basarat.gitbooks.io/typescript/content/docs/classes.html#access-modifiers
public
将生成与
相同的ES5let foo = 123;
但是在第一种情况下const foo = 123;
编译正常,但let foo = 123;foo = 456
将导致编译时错误。
答案 1 :(得分:3)
您已经发现,公共,私有,受保护的访问修饰符实际上并不影响最终输出的代码。它们 的作用是在编译时进行类型检查。
顾名思义,public
和private
修饰符限制了可以访问类成员的内容。它们也是氏族protected
中的第三个修饰符。
私有修饰符仅允许在该类中访问该类成员(变量或方法)。
受受保护的修饰符允许private
修饰符执行的所有操作,还允许扩展该类的其他类使用它。
最后,使用 public 修饰符可以使任何可以访问该类的人都可以访问public class属性。
有关更深入的解释和示例,请查看官方的TypeScript手册explanation。
使用修饰符可使编译器确保您的代码未使用不应使用的东西。首先使用类型的原因相同,这使得更难犯本来就不应该犯的错误!另外,如果您的文本编辑器支持TypeScript,则在显示变量和方法的自动完成值时还将使用访问修饰符。
答案 2 :(得分:0)
在ESnext中,私有类 fields 是使用#号前缀定义的:
class MyClass {
a = 1; // .a is public
#b = 2; // .#b is private
static #c = 3; // .#c is private and static
incB() {
this.#b++;
}
}
const m = new MyClass();
m.incB(); // runs OK
m.#b = 0; // error - private property cannot be modified outside class
*注意: 无法定义私有的方法,获取器和设置器。