我来自C#背景。我的大多数课程都是不可改变的。我想知道使用私有构造函数变量和公共getter来访问TypeScript类中的数据是否是一个好习惯。
例如:
class UnitType {
constructor(private code: string, private name: string, private unitType: string) {
}
get Code(): string {
return this.code;
}
get Name(): string {
return this.name;
}
get UnitType(): string
return this.unitType;
}
我似乎无法找到像上面这样的TypeScript代码的任何示例。我错过了什么吗?
答案 0 :(得分:1)
是的,这是一个很好的做法。封装永远是一件好事:它减少了表面错误"并且降低了程序员的认知负担(更少的东西 - 公众,可见 - 担心)。
虽然您可以使用ES5模拟私有属性,但这并不是以自然/琐碎或非常易读的方式进行的(某些替代方案甚至会导致性能损失)。所以你不会看到很多这样的代码,因为JavaScript本身没有私有修饰符。
此外,在打字稿中标记为私有的属性在编译时是私有的。由于它们的运行时是JavaScript,如上所述,它不知道私有是什么,它们将是可访问的。
答案 1 :(得分:1)
您可以使用public readonly
关键字将课程简化为:
class UnitType {
constructor(
public readonly code: string,
public readonly name: string,
public readonly unitType: string) {
}
}
// Usage:
var type1 = new UnitType("a", "b", "c");
// error TS2450: Left-hand side of assignment expression cannot be a constant or a read-only property.
type1.code = "aa";