0Pricing
TypeScript Academy · レッスン

クラスによるInterfaceの実装

implementsキーワードでクラスの構造を保証します。

「クラスによるInterfaceの実装」はCoddyKit上の無料TypeScript Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはTypeScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 TypeScript Academyコースには全4レッスンが含まれています。

ようこそ

`implements`キーワードは、クラスがインターフェースの契約を満たすことを保証します。TypeScriptは、クラスが必要なすべてのプロパティとメソッドを提供しているかを検証します。

基本的なimplements

クラス名の後に`implements InterfaceName`を記述します。必要なメンバーが1つでも欠けていると、TypeScriptはエラーを出します。
interface Printable {
  print(): void;
}
class Document implements Printable {
  print() { console.log('Printing...'); }
}

メンバーの不足によるエラー

クラスが必要なメンバーをすべて実装していない場合、TypeScriptはクラス宣言でエラーを報告します。
interface Serializable { serialize(): string; }
// Error: Class 'Broken' incorrectly implements interface 'Serializable'
// class Broken implements Serializable {}

複数のインターフェースの実装

クラスは、複数のインターフェースをカンマで区切って指定することで、一度に実装できます。
interface Flyable { fly(): void; }
interface Swimmable { swim(): void; }
class Duck implements Flyable, Swimmable {
  fly() { console.log('Flying'); }
  swim() { console.log('Swimming'); }
}

interfaceは実装を提供しない

インターフェースは形状だけを記述します。実際の実装はクラスが提供します。

オプショナルメンバーでのimplements

オプショナルなインターフェースメンバーは実装する必要がありません。クラスで提供しても構いませんが、必須ではありません。
interface Logger {
  log(msg: string): void;
  warn?(msg: string): void; // optional
}
class SimpleLogger implements Logger {
  log(msg: string) { console.log(msg); }
  // warn is not required
}

依存性注入のためのインターフェース

コンストラクターのパラメーター型にインターフェースを使用すると依存性注入が可能になり、そのインターフェースを実装する任意のクラスを渡せます。
interface Storage { save(data: string): void; }
class Service {
  constructor(private storage: Storage) {}
  run() { this.storage.save('data'); }
}
class LocalStorage implements Storage {
  save(data: string) { localStorage.setItem('key', data); }
}

extendsとimplements

`extends`は別のクラスから継承します(実装を共有します)。`implements`は形状をチェックするだけで、コードは継承されません。

インターフェースを実装し、クラスを拡張するクラス

クラスは、基底クラスを拡張しながら、同時にインターフェースを実装できます。
class Animal { breathe() { return 'breathing'; } }
interface Trainable { train(): void; }
class Dog extends Animal implements Trainable {
  train() { console.log('Sit!'); }
}

ジェネリックインターフェースの実装

クラスは型引数を指定することで、ジェネリックインターフェースを実装できます。
interface Repository<T> {
  findById(id: number): T | null;
}
class UserRepo implements Repository<User> {
  findById(id: number): User | null {
    return null; // stub
  }
}

implementsの型安全性

`implements`は実行時の振る舞いを追加しません。実行時のクラスはインターフェースを認識しません。これは純粋にコンパイル時の契約です。

確認問題

クラスが`implements`キーワードを使用したとき、TypeScriptは何をチェックしますか。

まとめ

`implements`は、クラスがコンパイル時にインターフェースの契約を満たすことを強制します。クラスは複数のインターフェースを実装できます。依存性注入、テスト容易性、振る舞いと実装の分離にはインターフェースを使用します。

よくある質問

「クラスによるInterfaceの実装」レッスンは無料ですか?

はい。「クラスによるInterfaceの実装」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、TypeScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 TypeScript Academyコースには全4レッスンが含まれています。

「クラスによるInterfaceの実装」で何を学びますか?

implementsキーワードでクラスの構造を保証します。 ブラウザで直接実行するハンズオンコードでTypeScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

TypeScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのTypeScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「クラスによるInterfaceの実装」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このTypeScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのTypeScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. TypeScriptのクラスとコンストラクター
  2. public、private、protected修飾子
  3. readonlyプロパティとパラメータープロパティ
  4. クラスによるInterfaceの実装
← TypeScript Academyに戻る