【にゅーたいぷぱたーん】
Newtypeパターン とは?
最終更新:
💡 同じ「数字」でも「ユーザーID」と「金額」を別物として扱う型の仕切り役
既存の型を薄いラッパーで包み、別の型として扱うパターン。同じ数値型でもユーザーIDと注文IDを区別し、型が合わない受け渡しを検出できる。単なる型の別名とは異なる。
📌 このページのポイント
Newtypeパターンって普通の型と何が違うの?
型に名前を付ければいいの?
中身は同じ数値だけど、実行時の費用は?
TypeScriptでもできるの?
例えばtype UserId = string & { _brand: "UserId" };のようなブランド付きの型で、似た区別を表せるよ。TypeScriptは基本的に値の構造で型を比べるので、ブランドで違いを加える方法なんだ。ただしasなどで型を指定すると、この区別を迂回できることもあるよ
型を分ければ、存在しないユーザーIDも防げる?
それは別の検証が必要だよ。型を分けるのは、ユーザーIDと注文IDなどの取り違えを減らすため。文字列の形式やユーザーの存在まで自動で確認するものではない。外部入力を確かめてから、その型の値を作る処理も考えるんだ
まとめ:ざっくりこれだけ覚えればOK!
「Newtypeパターン」って出てきたら「同じ種類の値を、意味ごとに別の型で包む方法」と思えばだいたいOK!
📖 おまけ:英語の意味
「Newtype Pattern」 = 既存の型を包んで別の型にするパターン
💬 Rust公式書籍は、Newtypeという名前がHaskellに由来すると説明しているよ。Haskellにはnewtypeという宣言があり、元の型と実行時の表現を共有する別の型を作る