web-dev-qa-db-ja.com

TypeScriptコンストラクターパラメーターの割り当て

私はインターフェースを持っています:

export interface IFieldValue {
    name: string;
    value: string;
}

そして私はそれを実装するクラスを持っています:

class Person implements IFieldValue{
    name: string;
    value: string;
    constructor (name: string, value: string) {
        this.name = name;
        this.value = value;
    }
}

読んだ後 この投稿 リファクタリングについて考えています:

class Person implements IFieldValue{
    constructor(public name: string, public value: string) {
    }
}

質問:最初のクラスには、デフォルトでprivateとなるフィールドがあります。 2番目のサンプルでは、​​publicとしてのみ設定できます。 TypeScriptのデフォルトのAccess修飾子はすべて正しいですか、それとも私の理解ですか?

11
demo

デフォルトではパブリック。 TypeScriptドキュメント

次の定義では

class Person implements IFieldValue{
    name: string;
    value: string;
    constructor (name: string, value: string) {
        this.name = name;
        this.value = value;
    }
}

属性<Person>.nameおよび<Person>.valueはデフォルトでパブリックです。

彼らがここにいるように

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) {}
}

私の意見では、これは冗長性を回避する最も好ましい方法です。

19
Maciej Caputa