クラスの型注釈
| 対応: | TypeScript 1.0(2014) |
|---|
TypeScript では、クラスのプロパティ・コンストラクタ引数・メソッドに型注釈を付けることができます。JavaScript のクラス構文をベースに型情報を加えることで、安全にオブジェクト指向プログラミングを行えます。
構文
class ClassName {
propertyName: Type;
constructor(arg: Type) {
this.propertyName = arg;
}
methodName(arg: Type): ReturnType {
// ...
}
}
型注釈の対象一覧
| 対象 | 書き方の例 | 概要 |
|---|---|---|
| プロパティ | name: string; | クラスフィールドに型を指定する。 |
| コンストラクタ引数 | constructor(id: number) | インスタンス生成時の引数に型を付ける。 |
| メソッドの引数 | greet(name: string) | メソッドが受け取る引数の型を指定する。 |
| メソッドの戻り値 | getAge(): number | メソッドが返す値の型を指定する。 |
| readonly プロパティ | readonly id: number; | 初期化後に変更できないプロパティを宣言する。 |
サンプルコード
class Person {
readonly id: number;
name: string;
affiliation: string;
constructor(id: number, name: string, affiliation: string) {
this.id = id;
this.name = name;
this.affiliation = affiliation;
}
greet(): string {
return `こんにちは、${this.affiliation}の${this.name}です。`;
}
introduce(): void {
console.log(this.greet());
}
}
const member = new Person(1, 'member_1', '開発部');
console.log(member.greet());
member.introduce();
// member.id = 99; // エラー: readonly プロパティには代入できない
// コンストラクタ引数の省略記法(アクセス修飾子と組み合わせる)
class Point {
constructor(
public x: number,
public y: number
) {}
distance(): number {
return Math.sqrt(this.x ** 2 + this.y ** 2);
}
}
const p = new Point(3, 4);
console.log(p.distance()); // 5
実行すると次のように出力されます。
npx ts-node ts_class_type.ts こんにちは、開発部のmember_1です。 こんにちは、開発部のmember_1です。 5
概要
TypeScript のクラスでは、プロパティを宣言してから代入するか、コンストラクタ引数に アクセス修飾子(『public』『private』など)を付けることでプロパティ宣言と初期化を同時に行う省略記法が使えます。
『readonly』を付けたプロパティはコンストラクタ内でのみ代入でき、それ以降は変更できません。オブジェクトの不変性を保つための基本的な手段として有効です。
クラスは型としても機能します。インターフェースをクラスに適用するには implements を使い、継承には JavaScript 標準の『extends』を使います。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。