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在本例子中代表Todo的title,description和complete三个key属性,题目中 'title'|'complete' 的 K 的值均是在 T 中的 key 属性值,即 K 继承于T。
[key in T]代表对象中的key为T中所含的key,in是一种遍历,结果相当于
title
description
completed
T[key] 则为对应key的value
string
string
boolean