高质量的类型类型可以提高项目的可维护性并避免一些潜在的漏洞。 一些大厂在前端面试中也考察到了 TypeScript 高级类型的挑战定义,本系列主要解答来自 Type Challenges 中的实现 TS 类型挑战问题,以此更好的类型了解 TS 的类型系统,编写自己的挑战类型工具。 下面来看一个难度为简单的实现题目:实现 Pick 实现 TS 内置的 Pick,但不可以使用它。类型 从类型 T 中选择出属性 K,挑战构造成一个新的实现类型。高防服务器 例如: interface Todo { title: string description: string completed: boolean } type TodoPreview = MyPick const todo: TodoPreview = { title: Clean room,类型 completed: false, Pick 类型用于从T类型中选择部分属性K来构造新的类型。 首先,挑战我们需要遍历对象 T。实现那就要使用映射类型来遍历: type MappedType [Key in keyof T]: T[Key]; 然后,要想迭代获取对象的挑战某个部分,就需要指定要迭代的实现key: type MappedType [Key in Keys]: T[Key]; 但是,这样写就会有两个错误: 这两个错误都与迭代规则有关: 如果规则 2 成立,那么规则 1 一定是成立的,因为现有的 keys 是指定类型之一。为了迭代现有的 key,我们需要使用extends关键字进行约束。这样,如果指定不存在的 key,TypeScript 将抛出一个错误,如果T中不存在这个 key,就不能调用T[key]。 Pick的实现如下: type MyPick [Key in Keys]: T[Key]; Type Challenges:https://github.com/type-challenges/type-challenges