分配 Typescript 构造函数参数
Assigning Typescript constructor parameters
我有接口:
export interface IFieldValue {
name: string;
value: string;
}
我有一个 class 来实现它:
class Person implements IFieldValue{
name: string;
value: string;
constructor (name: string, value: string) {
this.name = name;
this.value = value;
}
}
阅读后 this post 我正在考虑重构:
class Person implements IFieldValue{
constructor(public name: string, public value: string) {
}
}
问题:首先 class 我有一些字段,默认情况下应该是 private
。在第二个示例中,我只能将它们设置为 public
。我对 TypeScript 中默认访问修饰符的理解是否正确?
Public by default.
TypeScript Documentation
定义如下
class Person implements IFieldValue{
name: string;
value: string;
constructor (name: string, value: string) {
this.name = name;
this.value = value;
}
}
属性 <Person>.name
和 <Person>.value
默认为 public。
因为他们在这里
class Person implements IFieldValue{
constructor(public name: string, public value: string) {
this.name = name;
this.value = value;
}
}
注意: 这是一种不正确的做法,因为 this.name
和 this.value
将被视为未在构造函数中定义。
class Person implements IFieldValue{
constructor(name: string, value: string) {
this.name = name;
this.value = value;
}
}
要将这些属性设为私有,您需要将其重写为
class Person implements IFieldValue{
private name: string;
private value: string;
constructor (name: string, value: string) {
this.name = name;
this.value = value;
}
}
或等同于
class Person implements IFieldValue{
constructor (private name: string, private value: string) {}
}
对于 TypeScript 2.X 因为接口具有 public 的属性,您需要将 private
更改为 public
还有 export
类
export class Person implements IFieldValue{
constructor (public name: string, public value: string) {}
}
我认为这是避免冗余的最佳方式。
我有接口:
export interface IFieldValue {
name: string;
value: string;
}
我有一个 class 来实现它:
class Person implements IFieldValue{
name: string;
value: string;
constructor (name: string, value: string) {
this.name = name;
this.value = value;
}
}
阅读后 this post 我正在考虑重构:
class Person implements IFieldValue{
constructor(public name: string, public value: string) {
}
}
问题:首先 class 我有一些字段,默认情况下应该是 private
。在第二个示例中,我只能将它们设置为 public
。我对 TypeScript 中默认访问修饰符的理解是否正确?
Public by default. TypeScript Documentation
定义如下
class Person implements IFieldValue{
name: string;
value: string;
constructor (name: string, value: string) {
this.name = name;
this.value = value;
}
}
属性 <Person>.name
和 <Person>.value
默认为 public。
因为他们在这里
class Person implements IFieldValue{
constructor(public name: string, public value: string) {
this.name = name;
this.value = value;
}
}
注意: 这是一种不正确的做法,因为 this.name
和 this.value
将被视为未在构造函数中定义。
class Person implements IFieldValue{
constructor(name: string, value: string) {
this.name = name;
this.value = value;
}
}
要将这些属性设为私有,您需要将其重写为
class Person implements IFieldValue{
private name: string;
private value: string;
constructor (name: string, value: string) {
this.name = name;
this.value = value;
}
}
或等同于
class Person implements IFieldValue{
constructor (private name: string, private value: string) {}
}
对于 TypeScript 2.X 因为接口具有 public 的属性,您需要将 private
更改为 public
还有 export
类
export class Person implements IFieldValue{
constructor (public name: string, public value: string) {}
}
我认为这是避免冗余的最佳方式。