문제
제네릭 T
에서 프로퍼티 K
만 선택해 새로운 객체 타입을 반환하는 내장 제네릭 Pick<T,K>
를 구현해보세요.
예시:
interface Todo {
title: string
description: string
completed: boolean
}
type TodoPreview = MyPick<Todo, 'title' | 'completed'>
const todo: TodoPreview = {
title: 'Clean room',
completed: false,
}
풀이
먼저 error 케이스를 처리해 줍니다.
제네릭 K
에는 객체 타입 T
의 프로퍼티들만 전달되어야 합니다.
유효하지 않은 키가 들어온다면 error를 반환합니다.keyof
를 사용하여 객체 타입 T
의 프로퍼티들만 뽑아옵니다.
정답
type MyPick<T, K extends keyof T> = {
[key in K]: T[key];
};
in
을 사용하면 유니온 타입에서 하나씩 꺼내와 반복문처럼 사용할 수 있습니다. in
이 더 궁금하다면 참고
T
객체에서 K
로 넘어온 키들만 가진 객체를 반환해야 하기 때문에 key는 K
에서만 뽑아옵니다.
'Frontend > Type-Challenge' 카테고리의 다른 글
[타입챌린지/type-challenge] RequiredByKeys (0) | 2023.01.31 |
---|---|
[타입챌린지/type-challenge] Readonly (0) | 2023.01.26 |
[타입챌린지/type-challenge] Includes (2) | 2023.01.25 |
[타입챌린지/type-challenge] Awaited (0) | 2023.01.25 |
[타입챌린지/type-challenge] First of Array (0) | 2023.01.23 |