-
我一直以为 TypeScript 的类型能在运行时帮我挡住脏数据,直到一个接口返回了不符合类型的 JSON,我的类型注解形同虚设、程序当场崩溃的深度复盘
我用 TS 写前端,把 fetch 回来的 JSON 断言成 User 类型,然后心安理得地按 User 结构去用,以为标了类型就绝对安全。直到某天后端 bug 返回了不符合 User 的 JSON(profile 是 null),我的代码访问 user.profile.name 当场崩溃、页面白屏。我难以置信:都标成 User 了,类型检查呢?深究编译产物才懂:TS 类型是纯编译时的,编译成 J…- 0
- 0
-
TypeScript 标得明明白白的类型,线上却报 user.tags.join is not a function:我才明白类型在运行时根本不存在,而我一直把它当成了护身符
tags 我明明用 TypeScript 标成了 string[],线上却报 join is not a function。一查才发现后端悄悄把 tags 从数组改成了逗号分隔的字符串——而我的类型声明和 as User 断言,在这个 bug 面前毫无防御力,因为 TS 类型只在编译时存在、编译成 JS 后被彻底擦除,运行时根本不存在。这篇从类型擦除的本质讲起,梳理边界运行时校验(类型守卫/zod…- 0
- 0
-
tsc 全绿生产却白屏:TypeScript as 断言避坑复盘
一次很普通的发版,前端没怎么动,主要是后端调了几个接口,可发版后没几分钟客服群就炸了:页面整片白屏。打开 Sentry 满屏密密麻麻同一个错误——Cannot read properties of undefined。最让我懵的是,这套代码是 TypeScript 写的,tsc 编译零报错,本地和测试环境一切正常,CI 全绿才放出去的,一个号称类型安全的项目怎么会因为读取 undefined 属性…- 0
- 0
类型擦除
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!



