Skip to main content

Pick

Implement the built-in Pick<T, K> generic without using it. Constructs a type by picking the set of properties K from T For example:

ts
interface Todo {
title: string
description: string
completed: boolean
}
 
type TodoPreview = MyPick<Todo, 'title' | 'completed'>
Cannot find name 'MyPick'. Did you mean 'Pick'?2552Cannot find name 'MyPick'. Did you mean 'Pick'?
 
const todo: TodoPreview = {
title: 'Clean room',
completed: false,
}
ts
interface Todo {
title: string
description: string
completed: boolean
}
 
type TodoPreview = MyPick<Todo, 'title' | 'completed'>
Cannot find name 'MyPick'. Did you mean 'Pick'?2552Cannot find name 'MyPick'. Did you mean 'Pick'?
 
const todo: TodoPreview = {
title: 'Clean room',
completed: false,
}
Solution ✅
ts
interface Todo {
title: string
description: string
completed: boolean
}
 
type MyPick<T, K extends keyof T> = { [P in K] : T[P] }
 
type TodoPreview = MyPick<Todo, 'title' | 'completed'>
 
const todo: TodoPreview = {
title: 'Clean room',
completed: false,
}
ts
interface Todo {
title: string
description: string
completed: boolean
}
 
type MyPick<T, K extends keyof T> = { [P in K] : T[P] }
 
type TodoPreview = MyPick<Todo, 'title' | 'completed'>
 
const todo: TodoPreview = {
title: 'Clean room',
completed: false,
}