2016-08-04 62 views
1

我来自C#背景。我的大部分课程都设计为不可变的。我想知道是否使用私有构造函数变量和公共getter访问TypeScript类中的数据是一种很好的做法。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; 
} 

我似乎不能找到的打字原稿代码任何例子如上。我错过了什么吗?

+0

没关系,但不要利用你的干将或者他们会像类名有经验的开发者。 'private _code'和'get code()'会更典型。 – JohnnyHK

+0

这是C#dev的习惯... –

+0

@JohnnyHK了解。像Harry说的那样,C#最佳实践是将资产资本化。但是,当在罗马...... – cruzan

回答

1

是的,这是一个很好的做法。封装永远是一件好事:它减少了“错误表面”并降低了程序员的认知负担(更少的东西 - 公开的,可见的 - 担心)。

尽管您可以使用ES5模拟私有属性,但这并不是以自然/平凡或非常可读的方式进行的(有些替代方案甚至会导致性能损失)。所以你不会看到这么多的代码,因为JavaScript本身没有私有修饰符。

此外,打印机中标记为private的属性在编译时是私有的。因为他们的运行时是JavaScript,所以说,它不知道什么是私有的,他们将被访问。

+0

我没有意识到typescript中的私有属性在编译时只是私有属性,但这样做确实有意义,因为生成的代码是JavaScript。感谢您的澄清。 – cruzan

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

相关问题