const userId: UserId = 3
のように UserId
型には 3
のようなただの数値も代入できなくなるぐらい厳しいtstype Flavor<T, U extends string> = T & { _type?: U };
_type
をoptionalにするだけtstype UserId = Flavor<number, "UserIde">
tsconst userId: UserId = 1
UserId
と PostId
などはちゃんと区別される