// ============= 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 的 键联合类型