TypeSceipt学習。
自分向けの備忘録。
クラスって
主な用途はオブジェクトの作成。
同じプロパティやメソッドを持ったオブジェクトをいくつも作成したい場合にはクラスが適している。
クラスによって作成されたオブジェクトをインスタンスという。
クラス宣言・プロパティ宣言・new構文で呼び出し
// クラスを宣言
class Person {
// プロパティ宣言
// プロパティ名:型 = 値;
name: string = "";
age: number = 0;
}
// new構文で呼び出す
const taro = new Person();
console.log(taro.age);
// 0
ここで宣言されたプロパティを持ったオブジェクトをnewによって生成することができる。
クラス宣言の特徴で、クラスオブジェクトをという値を作るものであると同時にインスタンスの型を宣言するものでもある。
つまり、今回でいうtaroの型はPerson型ということになる。
コンストラクター
コンストラクタはnew構文でインスタンスが作成されるたびに呼び出される関数。主に、インスタンスの初期化をする。
// クラスを宣言
class Person {
name: string;
age: number;
// newから引数が渡ってくる
constructor(name: string, age: number) {
// thisは自分自身の持っているプロパティを指し、渡ってきた引数を代入する
this.name = name;
this.age = age;
}
profile() {
return `name: ${this.name}, age: ${this.age}`;
}
}
// new構文にてインスタンスを作成
// コンストラクタの宣言に合わせた引数を渡す
let taro = new Person("Taro", 30);
console.log(taro.profile());
// 結果:name: Taro, age: 30
コンストラクター内ではreaonlyプロパティにも代入はできる。初期のオブジェクトの作成途中のため、コンストラクター内では代入ができ、インスタンスのプロパティに代入はできない。
class Person {
name: string = "";
// readonly
readonly age: number = 0;
constructor(name: string, age: number) {
this.name = name;
// ここでの代入は許される、初期のオブジェクトを作成途中のため
this.age = age;
}
}
const taro = new Person("taro", 12);
console.log(taro.age);
// インスタンスへの代入はエラーとなる
taro.age = 23;
アクセシビリティ修飾子
// 書き方例
class Person {
public name: string;
private age: number;
protected nationality: string;
constructor(name: string, age: number, nationality: string) {
this.name = name;
this.age = age;
this.nationality = nationality;
}
profile(): string {
return `name: ${this.name}, age: ${this.age}`;
}
}
publicは何も書かない時と同じ。
privateはクラスの内部からしかアクセスできない。そのクラスのコンストラクタやメソッド内のみアクセス可能となり、クラスの外からのアクセスは不可。クラスを継承した場合、その子クラスからもアクセスできない。
protectedも、privateと同じくクラスの外からのアクセスは不可。しかし、継承した子クラスからはアクセス可能。
参考:
TypeScript入門
Udemy[JavaScriptエンジニアのためのハンズオンで学ぶTypeScript徹底入門2024年最新版]
c.sakyou