13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

TypeScript 类型挑战:实现 Pick

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


网页名称:TypeScript 类型挑战:实现 Pick
当前网址:http://cdbrznjsb.com/article/dhcjsse.html

其他资讯

让你的专属顾问为你服务