dem*_*emo 7 access-modifiers typescript
我有界面:
export interface IFieldValue {
name: string;
value: string;
}
Run Code Online (Sandbox Code Playgroud)
我有一个实现它的类:
class Person implements IFieldValue{
name: string;
value: string;
constructor (name: string, value: string) {
this.name = name;
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
看完这篇文章后,我一直在考虑重构:
class Person implements IFieldValue{
constructor(public name: string, public value: string) {
}
}
Run Code Online (Sandbox Code Playgroud)
问题:在第一课中,我有一些字段,默认情况下应该是private.在第二个样本中,我只能将它们设置为public.这一切是正确的还是我对TypeScript中默认Access修饰符的理解?
Mac*_*uta 17
默认公开. TypeScript文档
在以下定义中
class Person implements IFieldValue{
name: string;
value: string;
constructor (name: string, value: string) {
this.name = name;
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
属性<Person>.name并<Person>.value默认是公共的.
因为他们在这里
class Person implements IFieldValue{
constructor(public name: string, public value: string) {
this.name = name;
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
注意:这是一种不正确的方法,因为this.name并且this.value将被视为未在构造函数中定义.
class Person implements IFieldValue{
constructor(name: string, value: string) {
this.name = name;
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
要将这些属性设为私有,您需要将其重写为
class Person implements IFieldValue{
private name: string;
private value: string;
constructor (name: string, value: string) {
this.name = name;
this.value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
或者等价的
class Person implements IFieldValue{
constructor (private name: string, private value: string) {}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这是避免冗余的最佳方式.
| 归档时间: |
|
| 查看次数: |
8199 次 |
| 最近记录: |