Anthony Fu @ antfu.me

TypeScript类型体操练习记录

Apr 6 · 10min

TypeScript

TypeScript Type Challenge

04.实现Pick<T,K> 难度 easy

不使用 Pick<T, K> ,实现TS内置的 Pick<T, K> 的功能。

从类型 T 中选出符合 K 的属性,构造一个新的类型

例如:

interface Todo {
  title: string
  description: string
  completed: boolean
}

type TodoPreview = MyPick<Todo, 'title' | 'completed'>

const todo: TodoPreview = {
    title: 'Clean room',
    completed: false,
}

实现

需要用到extends keyof 以及in

type Pick<T,K extends keyof T>={
	[key in T]:T[key]
}

keyof T在本例子中代表Todotitle,descriptioncomplete三个key属性,题目中 'title'|'complete'K 的值均是在 T 中的 key 属性值,即 K 继承于T

[key in T]代表对象中的keyT中所含的keyin是一种遍历,结果相当于

	title
	description
	completed

T[key] 则为对应keyvalue

	string
	string
	boolean
>