记录下学习过程
题目是这样的
无需使用内置的Pick<T, K>泛型即可。
通过从K中选择属性T来构造类型
例如
interface Todo {
title: string
description: string
completed: boolean
}
type TodoPreview = MyPick<Todo, 'title' | 'completed'>
const todo: TodoPreview = {
title: 'Clean room',
completed: false,
}
继续之前推荐大家去typescript官网的playground,因为里面提供了自动语法检测的功能
比如上面的题目,可以去这里,点击这里打开就能跳转过去
默认情况下,测试用例如下
/* _____________ 测试用例 _____________ */
import { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<Expected1, MyPick<Todo, 'title'>>>,
Expect<Equal<Expected2, MyPick<Todo, 'title' | 'completed'>>>,
// @ts-expect-error
MyPick<Todo, 'title' | 'completed' | 'invalid'>,
]
interface Todo {
title: string
description: string
completed: boolean
}
interface Expected1 {
title: string
}
interface Expected2 {
title: string
completed: boolean
}
然后需要我们完成的代码如下
/* _____________ 你的代码 _____________ */
type MyPick<T, K> = any
只要完成“你的代码部分”,测试用例部分的错误提示就会消失
答案我公布下,参考别人的
这个值得仔细斟酌下,我感觉我都看不懂了
type MyPick<T, K extends number | string | symbol> = { [k in K]: k extends keyof T ? T[k] : never}