class クラスの基本(アクセサと静的メンバーを含む)
最終更新:2026-10-22
class クラスの基本(アクセサと静的メンバーを含む)
クラスはデータと操作をまとめます。フィールドが状態を保持し、コンストラクタが初期化し、メソッドが振る舞いを定義します。new でインスタンスを作り、this は現在のインスタンスを指します。TS は JS のクラスの上にフィールドの型注釈とコンパイル時検査を重ね、「初期化し忘れ」「引数の渡し間違い」をコードを書いている最中に露呈させます。
| グループ | 関数とクラス |
|---|---|
| 種類 | 構文 |
| strict モード | 不要 |
ℹ️ 説明 エディタは TypeScript を JavaScript にトランスパイルして実行します(型チェックなし)。型チェック結果は各サンプルの出力を参照してください。
📝 構文
class Book {
title: string; // フィールド:明示的な型
author: string;
copies: number;
constructor(title: string, author: string, copies = 1) {
this.title = title;
this.author = author;
this.copies = copies;
}
describe(): string {
return `${this.title} - ${this.author}`;
}
}
const book = new Book("三体", "刘慈欣", 3);
⚙️ パラメータ
| constructor | コンストラクタ:new のときに実行され、フィールドの初期化を担当します |
|---|---|
| describe(): string | メソッド:プロトタイプ上に定義される振る舞いです。戻り値型は明示的に注釈します |
戻り値:メソッドには戻り値型を明示的に注釈します。constructor には戻り値型を書きません(新しいインスタンス自身を暗黙的に返すためです)。
▶ サンプル
下のコードを編集して「試す」を押すと、トランスパイル実行結果を確認できます:
出力:
三体 - 刘慈欣 (3 冊)
(トランスパイル後の実行出力。new Book("三体", 123) はコンパイルエラーになります——第2引数は string でなければなりません)
💡 ポイント
ℹ️ 説明 フィールドは宣言箇所で直接初期化してコンストラクタでの代入を省けます:copies: number = 1。型も初期値から推論できます。
💡 ヒント 「パラメータプロパティ」は TS 独自の機能です。constructor(public title: string) と書くと、パラメータを宣言すると同時に同名のフィールドが自動作成・初期化され、this.title = title と手書きしたのと同じになります。
⚠️ 注意 strictPropertyInitialization が有効なとき、宣言箇所でもコンストラクタでも代入されないフィールドはエラーになります。null 許容のフィールドは title: string | undefined と書き、後から確実に代入するなら definite assignment(!)を使います。
🏷️ 関連関数とクラス
💡 関連ケース
ケースは今後追加予定です。
📚 関連チュートリアル
❓ よくある質問
Q フィールドの型は省略できますか?
A 宣言箇所で直接初期化するならできます(copies = 1 は number と推論)。宣言だけして初期化しない場合は必ず注釈が必要で、さもないと暗黙の any になります。
Q constructor に戻り値型はありますか?
A 書かないし、書くこともできません——クラスのインスタンスを暗黙的に返すためです。TS では constructor に戻り値の型注釈を書けず、new 式の型は常にクラスのインスタンスになります。
Q コールバックの中で this が失われる場合は?
A アロー関数のフィールド(say = () => this.x)を使うか、コールバックを渡す前に bind します。TS は this パラメータ(fn(this: Book))によるコンパイル時の制約もサポートしています。