複数の 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 を実装していない