TypeScript 入門の記録(60)プロを目指す人のためのTypeScript入門(44)第5章TypeScriptのクラス(4)
先週は、はこだて未来大学で開催された、kintoneのREST API を使うワークショップのメンターとして出張してきました。そして今日は、「第3回CPU + コンパイラ自作ワークショップ 質疑応答デー」の収録を担当しました。録画した内容は編集して、後日、参加者に限定公開する予定です。前回の note は、ワークショップに関連して、kintone Java Client を使ってみた記事を公開しましたが、今日はまた TypeScript入門に戻ります。
クラスの継承
TypeScript も他のプログラミング言語と同様に、クラスの継承ができます。クラスAを継承したクラスBのインスタンスは、継承元のクラスAのインスタンスの代わりに使用できます。これまでの学習で「部分型関係」が何度も登場したのですが、クラスAを継承したクラスBのインスタンスは、クラスAの部分型であるとも言えます。TypeScript のクラスの継承は、「部分型関係にあって、各オブジェクトのメソッドの実装に共通点がある複数のオブジェクト型を定義したい場合」に活用できそうです。他のプログラミング言語での開発経験から、安易に継承を使うと、プログラムが複雑になってしまうことがあると感じているので、TypeScript も慎重に使った方が良さそうです。
子は親の機能を受け継ぐ
継承は、extends キーワードを使用し、クラス名 extends 親クラス {...}という構文です。クラス構文の場合は、class extends 親クラス という形です。これは、他のプログラミング言語でも同様の構文で表現するので、すんなり理解できます。
// クラスの継承
// 子クラスは親クラスの機能を受け継ぐ
type HasAge531 = {
age: number;
}
class User531 {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
function getPrice(customer: HasAge531) {
if ( customer instanceof User531) {
if (customer.name === "uhyo") {
return 0;
}
}
return customer.age < 18 ? 1000 : 1800;
}
const customer1: HasAge531 = { age: 15 };
const customer2: HasAge531 = { age: 40 };
const uhyo531 = new User531( "uhyo", 26 );
console.log(getPrice(customer1));
console.log(getPrice(customer2));
console.log(getPrice(uhyo531));
コンパイルして実行すると、想定通りの結果が表示されました。
まとめ
今週は、クラスの継承の学習に入りました。次の節「オーバーライド」まで進めたかったのですが、時間切れです。今日の学習はここまでにします。この続きは次の週末の予定です。