-
我把 productId 当成 userId 传进了查询函数,两个都是 number、TypeScript 一声没吭,直到线上查出了张冠李戴的数据:一次 TS 结构化类型让语义不同的 ID 意外兼容、用品牌类型才拦住的深度复盘
我们有 getUser(userId: number) 和 getProduct(productId: number) 两个函数,一次重构里我手滑把 productId 传给了 getUser,满以为 TypeScript 会拦下这种低级错误,可它一声没吭、编译通过。线上就出现了用商品 ID 查用户、查出张冠李戴数据的诡异现象。查到底才明白这不是 bug:TS 是结构化类型系统,判断两个类型是否兼…- 0
- 0
-
我把一个商品 ID 错传给了需要用户 ID 的函数,TypeScript 全程绿灯没有半点警告,直到线上查错了数据才暴露,我对着结构化类型让语义不同的类型随意互换这个坑排查大半天的复盘
一个让我对 TypeScript 类型系统到底在保护什么重新认识的坑,隐蔽在我犯的是纯粹的逻辑错误(把 A 的 ID 当 B 的 ID 用),而我以为有类型系统罩着的 TS 却完全沉默。代码里有用户 ID 和商品 ID 恰好都是 number。type UserId = number;type ProductId = number;有个 getUserById(id: UserId) 函数,重构时…- 0
- 0
-
我把订单 ID 当成用户 ID 传进了查用户的函数,TypeScript 却一声不吭:结构化类型系统给我上的那一课的踩坑复盘
我给 UserId 和 OrderId 定义了不同的类型,以为 TS 会守住"别把订单 ID 当用户 ID 用"这条线。可手滑把订单 ID 传进查用户的函数,TS 却一声不吭、编译通过,运行时拿订单 ID 去用户表查了个寂寞。根因是 TypeScript 用的是结构化类型——按"结构"而非"名字"判断兼容,而两个 ID 结构都是 {val…- 0
- 0
品牌类型
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!



