会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 TypeScript 类型挑战:实现 Pick!

TypeScript 类型挑战:实现 Pick

时间:2025-11-05 08:30:26 来源:益强数据堂 作者:域名 阅读:187次

高质量的类型类型可以提高项目的可维护性并避免一些潜在的漏洞。

一些大厂在前端面试中也考察到了 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];

};keyof T用于从对象类型T中获取键值 key;in用于对对象键值key进行迭代;Key 就是类型对象键值 key 本身;T[Key]是指定 Key 的值;

然后,要想迭代获取对象的挑战某个部分,就需要指定要迭代的实现key:

type MappedType= {

[Key in Keys]: T[Key];

};

但是,这样写就会有两个错误:

不能将类型“Keys”分配给类型“string | number | symbol”。类型“Key”无法用于索引类型“T”。

这两个错误都与迭代规则有关:

key 可以是string、number、symbol;如果T中不存在Key,云服务器提供商就不能调用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

亿华云

(责任编辑:应用开发)

推荐内容
  • 戴尔电脑开机43错误(探究戴尔电脑开机43错误的根源,提供解决方案)
  • 电脑连接翼讯后发生错误的解决方法(翼讯连接错误、网络问题、解决方案)
  • 将MOV格式视频转换为MP4的简单方法(以MOV格式的视频为例,教你一步步将视频转换为MP4格式)
  • OPPOR732G全网通手机体验评测(OPPOR732G全网通手机的性能、拍照、续航等方面优势分析)
  • 深入了解u深度制作教程(从入门到精通,助你成为AI大师)
  • 用电脑设计明信片教程(轻松学会用电脑设计个性化明信片)