2017-01-29 6 views
4

私はインターフェイス持って割り当て活字体のコンストラクタのパラメータ

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

質問:ファーストクラスでは、デフォルトではのようなフィールドがあります。 2番目のサンプルでは、​​私はpublicとしか設定できません。 TypeScriptの既定のアクセス修飾子がすべて正しいのか理解していますか?

答えて

11

公開されています。 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は、デフォルトでは、公開される属性

彼らがここ

いるよう
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) {} 
} 

としてそれを書き換える必要があります。

+1

'Person'が' name 'と' value 'のパブリックプロパティを持つ 'IFieldValue'を実装している場合、' name'と 'value'は' Person'クラスの 'public'のままでなければなりません。入力した2つのコード例は、TypeScript 2.xでコンパイルされません。インターフェースを変更して、プロップをプライベートにするか、private props 'personName'と' personValue'を持つことができます: 'class Person implements IFieldValue { private personName:string; private personValue:string; コンストラクタ(パブリック名:文字列、パブリック値:文字列){ this.personName = name; this.personValue = value; } } –

+0

申し訳ありませんが、私が言った部分は無視してください:*「インターフェースを変更して、小道具を非公開にする」*小道具はインターフェース上でしか公開されていないので意味がありません –

関連する問題