分配 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.namethis.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) {}
}

我认为这是避免冗余的最佳方式。