作者小头像 Lv.1
33 成长值

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据
个人勋章
TA还没获得勋章~
成长雷达
15
18
0
0
0

个人资料

个人介绍

这个人很懒,什么都没有留下

感兴趣或擅长的领域

暂无数据

达成规则

发布时间 2026/10/21 22:15:09 最后回复 yd_93090908 2026/10/22 13:18:49 版块 智慧园区
26 6 0
他的回复:
可以按“保留哪些字段、改变哪些修饰符、是否需要运行时校验”来选用。补充一个接口更新的例子,以及一个容易混淆的键约束细节。假设:type User = { id: number; name: string; email?: string };只给列表展示 id、name:Pick。更新接口要求 id 必填,其余字段可选:type UserPatch = Pick & Partial>;表单提交前要求原类型的所有字段必填:Required。以固定角色名映射权限值:Record"admin" | "reader", boolean>。包装已有函数时,Parameters 提取参数元组,ReturnType 提取返回类型。需要特别区分 Pick 和内置 Omit 的约束:Pick 会报错,因为 Pick 的键要求属于 keyof User。Omit 则可以通过,结果仍保留 User 的字段;内置 Omit 的第二个参数允许 string/number/symbol 键,并不要求都是 User 已有的键。因此“Pick 和 Omit 传不存在的属性名都会报错”并不准确。若希望遗漏字段名拼错时也报错,可以包装一个严格版本:type StrictOmit = Omit;另外,这些工具类型只参与编译期类型检查,不会替你删除运行时对象字段、验证接口 JSON 或调用 Object.freeze。Readonly 通常也是浅层只读,嵌套对象的内部字段仍可能修改;要限制嵌套字段需另外设计深层类型及相应的运行时策略。官方参考:TypeScript Utility Types:https://www.typescriptlang.org/docs/handbook/utility-types.htmlTypeScript 3.5 官方说明中的 Omit 定义:https://devblogs.microsoft.com/typescript/announcing-typescript-3-5/