Closed6
TypeScript ガード節を使ったクラスの実装
背景
TypeScriptでアプリケーションを作っている際にガード節を使うクラスの作り方がわからなかったため、調べたことをまとめる
以下の、クラスをひとまず読んでみる
クラス
new
キーワードでオブジェクトを生成できる
class Person {}
const person = new Person();
コンストラクタ
クラスをnew
したときに実行される関数
constructor
構文で書く
class Person {
constructor(name: string) {
this.name = name;
}
}
ここにバリデーションロジックを書けば良さげ?
アクセス修飾子
フィールド、コンストラクタ、メソッドに宣言可能
-
public
- どこからでもアクセス可能
- デフォルトの設定
-
protected
- 自身のクラスとサブクラスからアクセス可能
-
private
- 自身のクラスのみアクセス可能
Person
クラスの予期せぬname
フィールドの変更を避けるにはprivate
をつけたら良さそう
class Person {
private name: string;
constructor(name: string) {
this.name = name;
}
}
静的フィールド、メソッド
クラスに属するフィールド、メソッドのこと
static
キーワードを使う
class Person {
private name: string;
static defaultPassword: string = "defaultPassword";
constructor(name: string) {
this.name = name;
}
static doSomething() {
console.log("Doing something");
}
}
バリデーションロジックは静的メソッドとして実装したらいいかな
調べたことをもとに自然数クラスNaturalNumber
を実装してみる
自然数として以下のような数を扱う
- 0より大きい数
- 整数である数
class NaturalNumber {
private value: number;
constructor(value: number) {
if (!NaturalNumber.isValid(value)) {
throw new Error("Value must be a natural number");
}
this.value = value;
}
private static isValid(value: number): boolean {
return value > 0 && Number.isInteger(value);
}
getValue(): number {
return this.value;
}
}
const n = new NaturalNumber(1);
console.log(n);
const n_error = new NaturalNumber(0);
console.log(n_error)
const n_error2 = new NaturalNumber(1.2);
console.log(n_error2);
このスクラップは13日前にクローズされました