TypeScript 类型设计的几个习惯
让非法状态无法表示
与其用一堆可选字段再加运行时判断,不如用可辨识联合(discriminated union)把状态建模清楚:
type State =
| { status: 'loading' }
| { status: 'success'; data: string[] }
| { status: 'error'; message: string };
这样在 status === 'success' 的分支里,data 一定存在,不需要 ! 或类型断言。
少用 any,多用 unknown
边界处拿到的数据先当 unknown,经过校验后再收窄成具体类型,比一路 any 安全得多。