核心结论
TypeScript采用结构化类型系统,结构相同的值通常可以互相赋值。因此,用户标识、订单标识、金额和距离如果都只是string或number,编译器无法阻止它们被传错位置。品牌类型通过给基础类型附加一个仅用于类型检查的独特标记,使结构相同但业务含义不同的值获得近似名义类型的区分;泛型参数则负责在仓储、容器、查询和转换函数中传播这种业务身份。品牌必须在可信的验证或构造边界产生,而不能只是到处使用as进行装饰,否则安全收益会被架空。
底层机制
常见实现是使用unique symbol作为品牌键,并与基础类型组成交叉类型: