TypeScript类的私有构造函数变量和公共getter

时间:2016-08-04 02:34:39

标签: typescript angular immutability

我来自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代码的任何示例。我错过了什么吗?

2 个答案:

答案 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";