モジュールのレッスン (1/2)
クラスと修飾子
TypeScript は、静的型付け、アクセス修飾子、短縮パラメータ プロパティなどの強力なオブジェクト指向プログラミング (OOP) 機能を備えた標準 ES6 クラスを拡張します。
クラスとアクセス修飾子
TypeScript では、次の 3 つの主要なキーワードを使用して、クラス メンバー、プロパティ、メソッドの可視性を制御できます。
public(デフォルト): メンバーにはどこからでもアクセスできます。private: メンバーは、それを定義するクラス内でのみアクセス可能です。protected: メンバーはクラスおよびそのサブクラス内でアクセス可能です (継承)。
class Animal {
public name: string;
private age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
public getAge(): number {
return this.age;
}
}パラメータのプロパティ
TypeScript は、コンストラクター内でクラス メンバーを直接宣言して初期化するための短縮構文を提供します。コンストラクター パラメーターの先頭にアクセス修飾子を付けると、プロパティが自動的に作成され、割り当てられます。
// This syntax does exactly the same as the previous example!
class Animal {
constructor(
public name: string,
private age: number,
) {}
}インターフェースの実装
クラスは、implements キーワードを使用して 1 つ以上のインターフェイスを実装できます。これにより、必要なメソッドとプロパティをすべて定義することで、クラスが特定の規約に準拠するようになります。
interface Flyable {
fly(altitude: number): void;
}
class Bird implements Flyable {
constructor(public name: string) {}
fly(altitude: number): void {
console.log(`${this.name} is flying at ${altitude} meters.`);
}
}継承と super
TypeScript はクラスの継承を完全にサポートしています。クラスは、extends キーワードを使用して別のクラスを拡張できます。サブクラスがコンストラクターを定義する場合、this にアクセスする前に、super() 関数を使用して基本クラスのコンストラクターを呼び出す必要があります。
class Person {
constructor(public name: string) {}
}
class Student extends Person {
constructor(
name: string,
public grade: number,
) {
super(name); // Calls the Person constructor
}
}自分で試してみてください
演習 1: 車のクラスとプライベート修飾子
Car という名前のクラスを宣言します。コンストラクターで定義された読み取り専用モデル プロパティ (文字列)、0 に初期化されたプライベート マイレージ プロパティ (数値)、マイレージをマイル単位で増分するパブリック メソッド drive(miles:number): void、およびマイレージを返すゲッターまたはメソッド getMileage():number が必要です。
ヒントを表示
プライベートマイレージを使用: 数値 = 0;変数をプライベートにし、constructor(public readonly model: string) {} を短縮表現として使用します。
3 回の試行後に解決策が利用可能になります
演習 2: シェイプ インターフェイスとサークル クラス
Shape インターフェイスを実装する Circle クラスを実装してコードを完成させます。このクラスには、コンストラクターを介して設定された読み取り専用の radius プロパティ (数値) が必要で、 getArea():number (Math.PI * radius * radius を返す) を実装する必要があります。
ヒントを表示
Circle クラスに Shape を実装し、getArea():number メソッドを定義します。
3 回の試行後に解決策が利用可能になります
演習 3: 抽象車両クラスとオートバイのサブクラス
抽象クラス Vehicle を拡張する Motorcycle という名前のクラスを宣言します。 start() メソッドを実装して、文字列 'Motorcycle ' に続いて make (this.make) と 'started' を返す必要があります。
ヒントを表示
Vehicle を拡張した Motorcycle クラスを使用し、正しい文字列を返す start(): string メソッドを実装します。
3 回の試行後に解決策が利用可能になります
演習 4: パラメータのプロパティと継承
コンストラクターの短縮表現を使用して、読み取り専用プロパティ ID (数値) とパブリック プロパティ名 (文字列) を定義する Employee という名前のクラスを作成します。次に、Employee を拡張するクラス Developer を作成し、コンストラクターを介してパブリック プロパティの部門 (文字列) を追加します。
ヒントを表示
Developer コンストラクターで super(id, name) を使用し、public 部門を使用してコンストラクター経由でプロパティを定義します。
3 回の試行後に解決策が利用可能になります