generated at
flavor type
TypeScriptの文脈の一部でのみ使われている名称


モチベーション
branded typesは、 const userId: UserId = 3 のように
UserId 型には 3 のようなただの数値も代入できなくなるぐらい厳しい
GraphQLなどのコード生成時に問題になるとのこと ref
branded typesより少し緩い型を使いたい



Flavor型の定義例
ts
type Flavor<T, U extends string> = T & { _type?: U };
よくあるbranded typesの定義の _type をoptionalにするだけ


使用例
ts
type UserId = Flavor<number, "UserIde">


以下のような操作が可能
ts
const userId: UserId = 1
同じ方法で定義した、 UserId PostId などはちゃんと区別される






constructorを通さなくても、その型の値を生成できてしまうということ
これ、そもそも問題としてることがいまいちわからないなmrsekut
branded typesを「構造が同じでも区別したい」という理由だけで使っていると問題と捉えてしまいそうなのはわかる
「branded typesはsmart constructorと組み合わすことで発揮される」と捉えるならば、flavor typeは不要だと思う
でもまあそういう需要はあるのだと思う、しらんけど




参考