-
我在 TypeScript 里把接口返回定义成成功结果和错误结果的联合类型本以为这下两种情况的字段我都能随便访问了,结果一访问成功结果才有的 data 字段编译器就报错说这个属性在错误结果上不存在,我对着明明是联合类型为什么不让我访问的报错懵了很久,最后才搞懂联合类型在值上是二选一在能安全访问的成员上反而只剩两者的交集的深度复盘
我写接口调用封装,想用 TypeScript 联合类型优雅表达成功和失败两种返回:interface SuccessResult { ok:true; data:string } 和 interface ErrorResult { ok:false; message:string },type ApiResult = SuccessResult | ErrorResult。结果一访问 result…- 0
- 0
-
我在 TypeScript 里给函数参数标了个空对象大括号类型、想表示只收一个对象,结果传数字、传字符串、传布尔值进去编译器全都不报错照单全收,我盯着那对空大括号愣了半天,最后才搞懂这个看着像空对象的类型实际表示的是除了 null 和 undefined 之外几乎任何值的深度复盘
我写了个函数本意只接收一个对象(任意结构都行但至少得是对象、不能是基本类型),很自然把参数类型标成了 {}——直觉里 {} 不就是一个空对象引申为任意对象嘛,以为这样就能限制住只准传对象。可写着发现不对:把 42、hello、true 这些明显不是对象的值传进去编译器一个错都不报,这道我以为加上的只准传对象的约束形同虚设。我以为哪里写错了、反复确认参数类型就是 {},又怀疑 strict 没开也开…- 0
- 0
-
我在 TypeScript 里用 as 把接口返回的数据断言成了我定义的类型,以为这下类型安全了可以放心用,结果运行时那个字段是 undefined 直接报错,因为 as 根本不做任何检查:一次滥用类型断言的深度复盘
我从后端接口拿到一坨 JSON,为了能有类型地用它,顺手写了 const user = data as User,心想这下 user 就是 User 类型、可以放心 user.profile.name 了。编译一点不报错就上线,结果线上报 TypeError: Cannot read properties of undefined——user.profile 居然是 undefined。排查才发现…- 0
- 0
-
一个图省事用 any 接住的 JSON 数据,像墨水一样把后面一整片代码的类型检查都染没了,拼错的属性名 TS 一声不吭:一次 any 扩散的深度复盘
从 JSON.parse 拿数据图省事声明成 any,后面把 nickname 拼成了 nikename、用错类型,TS 编译却一个错都没报,上线后取到 undefined 页面空白。根因是 any 关闭对这个值的类型检查(任何操作都放行)且会传染:data 是 any,data.user、data.user.profile 派生的还是 any,从那个 any 开始后面一整片代码都悄悄失去了类型检…- 0
- 0
-
一个用 as User 把后端返回的 JSON 强转成类型的写法,在字段结构对不上时让 TypeScript 的类型检查彻底成了摆设、运行时崩在 undefined 上:一次类型断言滥用的深度复盘
用户详情页在某些用户身上稳定白屏,报 Cannot read properties of undefined——可代码明明有完整类型声明、编译一个错没报。根因是 const user = await res.json() as User:as 只是类型断言,在编译期单方面告诉编译器'信我这是 User',不做任何运行时检查或转换;后端某些情况没返回 profile,TS 毫不知…- 2
- 0
类型守卫
幸运之星正在降临...
点击领取今天的签到奖励!
恭喜!您今天获得了{{mission.data.mission.credit}}积分
我的优惠劵
-
¥优惠劵使用时效:无法使用使用时效:
之前
使用时效:永久有效优惠劵ID:×
没有优惠劵可用!





