已开机,快来 Type-Challenges【 easy-4-pick】

363 阅读1分钟

Pick

实现内置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,
}

要点

  • K extends keyof T 泛型约束,KT类型的 key 的联合类型
  • [P in K] 循环K

解答

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

测试

type cases = [
  Expect<Equal<Expected1, Pick<Todo, 'title'>>>,
  Expect<Equal<Expected2, Pick<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
}

更多解答

分享你的解答 查看解答