概要: このチュートリアルでは、private、protected、publicを含むTypeScriptのアクセス修飾子について学習します。
アクセス修飾子は、クラスのプロパティとメソッドの可視性を変更します。TypeScriptは3つのアクセス修飾子を提供します。
- private
- protected
- public
TypeScriptは、実行時ではなく、コンパイル時に論理的にアクセスを制御することに注意してください。
private修飾子
private
修飾子は、可視性を同じクラスのみに制限します。プロパティまたはメソッドにprivate
修飾子を追加すると、同じクラス内でそのプロパティまたはメソッドにアクセスできます。クラスの外からprivateプロパティまたはメソッドにアクセスしようとすると、コンパイル時にエラーが発生します。
次の例は、person
クラスのsnn
、firstName
、lastName
プロパティにprivate
修飾子を使用する方法を示しています。
class Person {
private ssn: string;
private firstName: string;
private lastName: string;
// ...
}
Code language: TypeScript (typescript)
private
プロパティが設定されると、Person
クラスのコンストラクタまたはメソッドでssn
プロパティにアクセスできます。例えば
class Person {
private ssn: string;
private firstName: string;
private lastName: string;
constructor(ssn: string, firstName: string, lastName: string) {
this.ssn = ssn;
this.firstName = firstName;
this.lastName = lastName;
}
getFullName(): string {
return `${this.firstName} ${this.lastName}`;
}
}
Code language: TypeScript (typescript)
次の例は、クラスの外からssn
プロパティにアクセスしようとしています。
let person = new Person('153-07-3130', 'John', 'Doe');
console.log(person.ssn); // compile error
Code language: TypeScript (typescript)
public修飾子
public
修飾子を使用すると、クラスのプロパティとメソッドはすべての場所からアクセスできます。プロパティとメソッドにアクセス修飾子を指定しない場合、デフォルトでpublic
修飾子が適用されます。
たとえば、Person
クラスのgetFullName()
メソッドにはpublic
修飾子が付いています。次の例では、getFullName()
メソッドにpublic修飾子を明示的に追加しています。
class Person {
// ...
public getFullName(): string {
return `${this.firstName} ${this.lastName}`;
}
// ...
}
Code language: TypeScript (typescript)
これは、public
キーワードを省略した場合と同じ効果があります。
protected修飾子
protected
修飾子を使用すると、クラスのプロパティとメソッドは、同じクラスとサブクラス内からアクセスできます。
あるクラス(子クラス)が別のクラス(親クラス)を継承する場合、それは親クラスのサブクラスです。
他の場所からprotectedプロパティまたはメソッドにアクセスしようとすると、TypeScriptコンパイラはエラーを発行します。
プロパティまたはメソッドにprotected修飾子を追加するには、protected
キーワードを使用します。例えば
class Person {
protected ssn: string;
// other code
}
Code language: TypeScript (typescript)
ssn
プロパティはこれでprotectedになります。Person
クラス内と、Person
クラスを継承するクラス内からアクセスできます。継承についてはここで詳しく説明しています。
Person
クラスは2つのprivateプロパティと1つのprotectedプロパティを宣言しています。そのコンストラクタはこれらのプロパティを3つの引数に初期化します。
class Person {
protected ssn: string;
private firstName: string;
private lastName: string;
constructor(ssn: string, firstName: string, lastName: string) {
this.ssn = ssn;
this.firstName = firstName;
this.lastName = lastName;
}
getFullName(): string {
return `${this.firstName} ${this.lastName}`;
}
}
Code language: TypeScript (typescript)
コードを短くするために、TypeScriptでは次のようにコンストラクタ内でプロパティを宣言して初期化することができます。
class Person {
constructor(
protected ssn: string,
private firstName: string,
private lastName: string
) {}
getFullName(): string {
return `${this.firstName} ${this.lastName}`;
}
}
Code language: TypeScript (typescript)
プロパティとメソッドの可視性を考慮する際には、最も可視性の低いアクセス修飾子であるprivateから始めるのが良い方法です。
概要
- TypeScriptは、クラスのプロパティとメソッドに3つのアクセス修飾子を提供します。
private
、protected
、public
です。 private
修飾子は、同じクラス内からのアクセスを許可します。protected
修飾子は、同じクラスとサブクラス内からのアクセスを許可します。public
修飾子は、任意の場所からのアクセスを許可します。- アクセス修飾子を省略した場合、プロパティとメソッドは
public
アクセスになります。