-
我在 TypeScript 里到处用感叹号非空断言把编译器的红线消掉、它不报错我就以为安全了,结果线上照样满屏 Cannot read properties of undefined 的崩溃,排查很久才彻底想通那个感叹号根本不会在运行时做任何检查、它只是我对编译器单方面许下的一个空头承诺的深度复盘
我曾经特别爱用 TypeScript 的非空断言感叹号:哪里编译器报可能为 null/undefined、画红线,我就在后面点个感叹号告诉它这里一定不是空,红线立刻消失、编译通过,我就觉得搞定了、安全了。直到线上监控满屏都是 Cannot read properties of undefined 的崩溃,而出事的地方恰恰都是我用感叹号搞定过的。比如 users.find(u=>u.id===…- 0
- 0
-
我用逻辑或给配置项设默认值,用户明明传了一个合法的 0,却被我当成没传替换成了默认值,因为 || 判断的是假值不是是否缺失,而 0、空字符串、false 都是合法却为假的值的深度复盘
我有个配置项 pageSize,为了用户没配时给默认值 20,写得很顺手:const pageSize = config.pageSize || 20。一直好好的,直到有用户反馈:我把 pageSize 配成了 0(业务里 0 表示不分页、返回全部),系统却还是按 20 分页、我的 0 不生效!一看代码就傻眼:config.pageSize 明明是 0,可 0 || 20 的结果是 20——|| …- 0
- 0
-
我按索引取数组元素、直接用它的属性,TypeScript 一声没吭,可那个索引越界了、取到的是 undefined,运行时直接炸:一次 TS 索引访问类型漏洞的深度复盘
我有个数组 items: Item[],某处 const item = items[index]; item.name,TS 编译一声没吭。可线上某次 index 因为某个计算越界了(算成 10 而数组只有 5 个),程序当场炸 Cannot read properties of undefined (reading 'name')。既然 items 是 Item[],item…- 0
- 0
可选链
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!



