Closed6

TypeScript ガード節を使ったクラスの実装

fuutotfuutot

クラス

newキーワードでオブジェクトを生成できる

class Person {}
const person = new Person();
fuutotfuutot

コンストラクタ

クラスをnewしたときに実行される関数
constructor構文で書く

class Person {
  constructor(name: string) {
    this.name = name;
  }
}

ここにバリデーションロジックを書けば良さげ?

fuutotfuutot

アクセス修飾子

フィールド、コンストラクタ、メソッドに宣言可能

  • public
    • どこからでもアクセス可能
    • デフォルトの設定
  • protected
    • 自身のクラスとサブクラスからアクセス可能
  • private
    • 自身のクラスのみアクセス可能

Personクラスの予期せぬnameフィールドの変更を避けるにはprivateをつけたら良さそう

class Person {
    private name: string;
    
    constructor(name: string) {
        this.name = name;
    }
}
fuutotfuutot

静的フィールド、メソッド

クラスに属するフィールド、メソッドのこと
staticキーワードを使う

class Person {
    private name: string;
    static defaultPassword: string = "defaultPassword";

    constructor(name: string) {
        this.name = name;
    }

    static doSomething() {
        console.log("Doing something");
    }
}

バリデーションロジックは静的メソッドとして実装したらいいかな

fuutotfuutot

調べたことをもとに自然数クラス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日前にクローズされました