複数の interface を implementsできるとどう嬉しいのか

業務アプリなどでは、1つのクラスに 複数の責任(ログイン・保存・ログ出力など) を持たせたいことがあります。
TypeScriptでは、こうした処理を 責務ごとに interface に分離し、必要な機能だけをクラスに implements することで、
柔軟かつ安全な設計が可能になります。


✅ Step1: インターフェース定義(機能ごとの責任)

interface Authenticatable {
  login(): void;
}

interface Persistable {
  save(): void;
}

interface Loggable {
  log(): void;
}
  • Authenticatable:ログイン機能を提供する
  • Persistable:データ保存ができる
  • Loggable:ログ出力ができる

👤 AdminUser は「ログイン・保存・ログ出力」を全部実装

class AdminUser implements Authenticatable, Persistable, Loggable {
  login() {
    console.log("AdminUser: ログインしました。");
  }

  save() {
    console.log("AdminUser: 設定を保存しました。");
  }

  log() {
    console.log("AdminUser: ログを出力しました。");
  }
}

👥 GuestUser は「ログインとログ出力」のみ実装(保存は不可)

class GuestUser implements Authenticatable, Loggable {
  login() {
    console.log("GuestUser: ゲストとしてログインしました。");
  }

  log() {
    console.log("GuestUser: ログ出力(閲覧のみ)。");
  }
}

🔍 使用例

const admin = new AdminUser();
admin.login(); // ログインしました
admin.save();  // 保存しました
admin.log();   // ログ出力

const guest = new GuestUser();
guest.login(); // ゲストログイン
guest.log();   // ログ出力
// guest.save(); // ❌ エラー: Persistable を実装していない

コメントを残す 0

Your email address will not be published. Required fields are marked *