TypeScript & 関数型講座 第1回 型の重要性
- 15. 表現力豊かな型はプログラムを分かりやすくする
class MailAddress {
private readonly __nominal: void
constructor(public readonly value: string) {
assert(isString(value), `文字列ではありません `)
assert(5 <= value.length, `メールアドレスは 5 文字以上としてください `)
assert(value.length <= 20, `メールアドレスは 20 文字以下としてください `)
const reg = /^[A-Za-z0-9]{1}[A-Za-z0-9_.-]*@{1}[A-Za-z0-9_.-]{1,}.[A-Za-z0-9]{1,}$/
assert(reg.test(value), `不正なフォーマットです `)
}
}
MailAddress クラスの値は、5 文字以上、20 文字以下のメールアドレスとして適当な文字
列であるということがわかる。string では文字列ということしかわからない
型は制約を増やすごとに表現力が増していく
- 19. function map<T, U>(array: T[], f: (item: T) => U): U[] {
// ...
}
シグネイチャーからメソッドの内容を推測できる
表現力豊かな型システムを関数に適用すると、その関数の型シグネイチャーを見るだけ
で、その関数について知る必要のあることのほとんどを知ることができる。