// ============= Test Cases =============
import type { Equal, Expect } from './test-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
}
// ============= Your Code Here =============
type MyPick<T, K extends keyof T> = {
  [key in K]: T[key]
}
type MyPick<T, K extends keyof T> = {
  [key in K]: T[key]
}
Pick的用法
type typeA = {
	name: string;
	age: number;
}
type = Pick<typeA, 'name'>
// { name: string }
用索引键 key
用 in 来窄化 key的类型为传入的泛型 K
同时 K 约束为 T 的 键联合类型