項目39 差異のモデリングより型の統一を優先する
同じ型の異なるバリエーションを持つことは、認知不可が高まり、多くの変換コードが必要になる
DBのテーブルとそれに対するモデルを型で表現しようとした場合
DBはカラム名にスネークケースを用いるため、下記のインターフェースを定義
code:ts
interface StudentTable {
first_name: string;
last_name: string;
birth_date: string;
}
TypeScriptではプロパティ名にキャメルケースを用いるため、下記のインターフェースを定義
code:ts
interface Student {
firstName: string;
lastName: string;
birthDate: string;
}
型を変換する関数を使って、一方の型から他方の型を生成する方法で対応もできる
code:ts
type Student = ObjectToCamel<StudentTable>;
// ^? type Student = {
// firstName: string;
// lastName: string;
// birthDate: string;
// }
❌️複数のバリエーションを持つ型や、変換用コードが必要な型は、認知不可が高く実装者に使い方を考えさせてしまうため避けたい
型のわずかな違いをモデリングするより、違いを排除して単一の型を扱うようにするべき
ただ、例外もある
DBもAPIも自分の管理下にない場合は、異なるバリエーションの型は許容せざる終えない
同じものを表現していない型は無理に統一しない