常见工具类型、可选值和接口类型怎么处理

先理解原理和示例,再练习完整口述与追问。

理解 Partial、Required、Pick、Omit、Record、ReturnType 的实际用途。区分可选字段与明确允许 null。TS 类型在运行时被擦除,关键外部数据仍要校验;Partial 也不等于递归地全部可选。

Partial、Required、Pick、Omit、Record、Readonly 等工具在类型层面转换结构,不会修改运行时对象。可选属性表示可能缺失,需要结合 strictNullChecks 等配置处理。接口外层 ApiResponse<T> 描述协议形状,业务仍需校验状态和数据,不能只用类型名掩盖错误返回。

ts
type User = { id: string; name: string; age?: number }
type UserPatch = Partial<Pick<User, 'name' | 'age'>>
type Users = Record<string, User>

更新接口只接受允许修改的字段,避免把 id 也默认为可编辑。Readonly<User> 不会深度冻结 user,也不会自动阻止外部 JS 改对象。

不要用非空断言 ! 代替真实缺失处理,也不要默认 Partial 意味着所有字段都可以安全传给后端更新。

Partial 把当前层属性设为可选,Required 反过来;Pick 选字段,Omit 去字段,Record 描述一组键到值的映射,ReturnType 取得函数返回类型。可选字段意味着可能不存在,null 是明确的空值,需要按接口分别声明。它们都属于编译期类型运算,默认 Partial 不递归;例如更新表单类型可用 Pick 后组合 Partial,但权限和字段合法性仍由运行时及后端验证。