효뚜르팝의 Dev log
[Type-Challenges] Pick, Readonly, Tuple to Object, First of Array, Length of Array, Length of Tuple, Exclude 본문
TIL
[Type-Challenges] Pick, Readonly, Tuple to Object, First of Array, Length of Array, Length of Tuple, Exclude
hyodduru 2024. 6. 9. 17:141. Pick
T에서 K 프로퍼티만 선택해 새로운 오브젝트 타입을 만드는 내장 제네릭 Pick<T, K>을 이를 사용하지 않고 구현하세요.
풀이
type MyPick<T, K extends keyof T> = { [P in K]: T[P]; };
- T : Type
- K : Key
- Pick : 주어진 타입 T에서 특정 프로퍼티 K만 선택해 새로운 타입을 만드는 역할을 함.
- K extends keyof T: K는 T 타입의 키들의 유니온 타입 중 일부.
- [P in K]: T[P]: P는 K의 각 요소를 나타내며, 결과 타입의 프로퍼티로 사용됨. T[P]는 T 타입에서 P 키에 해당하는 프로퍼티 타입을 나타냄.
참고)
in : TypeScript에서 in 키워드는 매핑된 타입(mapped types)을 정의할 때 사용
-> P in K를 통해, K의 유니온 타입들을 순회하고 있음.
2. ReadOnly
T의 모든 프로퍼티를 읽기 전용(재할당 불가)으로 바꾸는 내장 제네릭 Readonly<T>를 이를 사용하지 않고 구현하세요.
풀이
type MyReadonly<T> = {
readonly [P in keyof T]: T[P];
};
- readonly [P in keyof T]: T[P]는 각 프로퍼티 P를 읽기 전용으로 만들고, T[P]는 T 타입의 해당 프로퍼티 타입을 가져옴
3. Tuple to Object
배열(튜플)을 받아, 각 원소의 값을 key/value로 갖는 오브젝트 타입을 반환하는 타입을 구현하세요.
풀이
type TupleToObject<T extends readonly any[]> = {
[K in T[number]: K
};
- T extends readonly any[]: 입력으로 받는 튜플의 타입을 제한. readonly any[]는 임의의 타입의 읽기 전용 배열을 나타냄.
- T[number]: 튜플의 각 원소의 타입을 나타냄.
- [K in T[number]]: K: 매핑된 타입을 사용하여 각 튜플의 원소에 대해 반복합니다. 이 때 K는 각 원소의 값이 됩니다. 따라서 K를 키로 사용하여 각 원소의 값을 나타내는 객체를 만듬
4. First Of Array
배열(튜플) `T`를 받아 첫 원소의 타입을 반환하는 제네릭 `First<T>`를 구현하세요.
풀이
type First<T extends any[]> = T extends [] ? never : T[0]
- T extends []: 입력으로 받는 배열 T가 비어있는지 여부를 확인한다. 만약 T가 비어있다면 이 경우에는 첫 번째 원소가 존재하지 않기 때문에 never 타입을 반환한다.
- T[0]: 그렇지 않은 경우, 즉, T가 비어있지 않은 배열인 경우, 첫 번째 원소의 타입을 가져온다.
5. Length Of Tuple
배열(튜플)을 받아 길이를 반환하는 제네릭 `Length<T>`를 구현하세요.
풀이
type Length<T extends readonly any[]> = T['length']
- T extends readonly any[]: 입력으로 받는 타입 T가 배열이거나 튜플임을 보장함.
- T['length']: TypeScript의 인덱스 타입을 사용하여 배열의 길이를 가져온다.
6. Exclude
T에서 U에 할당할 수 있는 타입을 제외하는 내장 제네릭 Exclude<T, U>를 이를 사용하지 않고 구현하세요.
풀이
type MyExclude<T, U> = T extends U ? never : T;
- T extends U ? never : T: 조건부 타입을 사용하여 T가 U에 할당할 수 있는 타입인지 확인한다. 만약 T가 U에 할당할 수 있는 타입이라면 never 타입을 반환하여 제외한다.
- never : TypeScript에서 절대 발생하지 않는 값
'TIL' 카테고리의 다른 글
| [React 까보기 시리즈] React 구성요소인 reconciler, renderer 등의 내부 패키지 & fiber, rendering 등의 용어 정리 (4) | 2024.07.24 |
|---|---|
| [React Canary Version] useActionState, useOptimistic에 대하여 (2) | 2024.07.21 |
| Solving TypeScript Errors (1) | 2024.05.21 |
| dnd kit의 useDraggable를 사용하여 드래그 가능한 컴포넌트 구현하기 (0) | 2024.05.12 |
| [유데미(udemy) - React CleanCode] Hooks (0) | 2024.05.02 |