>>128
TypeScriptでは構造的型付けの問題点を解決するために安全なプログラムでは名前で区別するようになったよ
ブランディングと呼ばれる手法が用いられていて構造に名前を入れることを必須にしてその名前によって構造を区別してるよ

interface UserId {
__brand: "UserId";
id: number;
}

interface ProductId {
__brand: "ProductId";
id: number;
}