#はじめに
前回は【TypeScript】関数定義についてアウトプットしました。
今回はTypeScriptの**class定義
**についてアウトプットします。
#クラスの型定義
次の Animal クラスは、1 つのプロパティ、1 つのコンストラクタ、1 つのメソッドを持っています。
class Animal {
// プロパティ
name: string;
age: number;
// コンストラクタ
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
// メソッド
name() {
console.log(this.name)
}
age() {
console.log(this.age)
}
}
※constructor(関数)の戻り値の型宣言は行わない
プロパティやメソッドの可視性はデフォルトでpublic
になるため、外部からアクセスできないようにするには、明示的にprivate
と指定する必要があります。
クラスのインスタンスを生成するには、次のように new キーワードを使用します。
const animal = new Animal('パンくん', 22);
animal.name(); // パンくん
animal.age(); // 22
#継承
extends
を使用することで継承できます。
class Animal {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
name() {
console.log(this.name)
}
age() {
console.log(this.age)
}
}
class Dog extends Animal {
weight: number;
constructor(name: string, age: number, weight: number) {
super(name, age);
this.weight = weight;
}
weight() {
console.log(this.weight)
}
}
const dog = new Dog('ジェームズ', 7, 20);
dog.name(); // ジェームズ
dog.age(); // 3
dog.weight(); // 15
#プロパティ定義の省略
コンストラクタのパラメータの前にprivate
やpublic
を指定すると、プロパティ定義とその値を設定するコードを省略することができます。
class Animal {
private name: string;
constructor(name: string) {
this.name = name;
}
}
class Animal {
constructor(private name: string) {}
}
#プロパティのsetter/getterの定義
メソッド名の前にset
キーワード、get
キーワードを付けて定義することで、プロパティの setter/getter
を定義することができます。 setter はプロパティへの代入時に呼び出され、getter はプロパティの参照時に呼び出されます。setter/getter
は必ずpublic
として扱われます。
class Animal {
private _name: string = '';
set name(value: string) {
console.log('名前が設定されました');
this._name = value;
}
get name(): string {
console.log('名前が呼ばれました');
return this._name;
}
}
const b = new Animal();
b.name = 'パンくん'; // 名前が設定されました
console.log(b.name); // 名前が呼ばれました => パンくん