2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

타입스크립트에서 Exclude와 Extract의 차이는 무엇인가요?

_____
Q1: 타입스크립트에서 Exclude와 Extract는 무엇인가요?
A1:
- `Exclude`는 유니언 타입 `T`에서 `U`에 할당 가능한 타입들을 제거한 새로운 타입을 만듭니다.
- `Extract`는 유니언 타입 `T`에서 `U`에 할당 가능한 타입들만 추출한 새로운 타입을 만듭니다.

---

Q2: Exclude의 기본 용법은 무엇인가요?
A2:
```typescript
type Result = Exclude<'a' | 'b' | 'c', 'a' | 'c'>; // 'b'
```
- `'a' | 'b' | 'c'` 중 `'a'`와 `'c'` 타입을 제거해서 결과는 `'b'` 타입입니다.

---

Q3: Extract의 기본 용법은 무엇인가요?
A3:
```typescript
type Result = Extract<'a' | 'b' | 'c', 'a' | 'c'>; // 'a' | 'c'
```
- `'a' | 'b' | 'c'` 중 `'a'`와 `'c'` 타입만 추출해서 `'a' | 'c'` 타입이 됩니다.

---

Q4: Exclude와 Extract는 어떤 경우에 주로 사용되나요?
A4:
- `Exclude`는 특정 타입 집합에서 일부 타입을 제거하고 싶을 때 사용합니다. (예: 특정 옵션 제외)
- `Extract`는 두 타입 집합 사이 공통되는 타입만 골라낼 때 유용합니다. (예: 공통된 타입만 허용)

---

Q5: 예시로 두 타입의 차이를 설명해주실 수 있나요?
A5:
```typescript
type A = 'x' | 'y' | 'z';
type B = 'y' | 'z' | 'w';

type Excluded = Exclude; // 'x' -> A 에서 B에 포함된 'y', 'z' 제거
type Extracted = Extract; // 'y' | 'z' -> A와 B 모두에 있는 타입만 추출
```

---

Q6: Exclude와 Extract의 반환 타입은 항상 유니언 타입인가요?
A6:
네, 두 제네릭 유틸리티 타입 모두 기본적으로 유니언 타입을 반환하며, 입력 타입과 조건에 따라 단일 타입 또는 빈 타입(`never`)일 수도 있습니다.

---

Q7: 타입스크립트 내부에서 Exclude와 Extract는 어떻게 작동하나요?
A7:
- TypeScript는 유니언 타입의 각 원소별로 조건부 타입을 평가해 제거 및 추출 작업을 수행합니다.
- `Exclude`는 `T`의 각 원소 타입이 `U`에 할당 가능한지 검사하여 제거합니다.
- `Extract`는 `T`의 각 원소 타입이 `U`에 할당 가능한지 검사하여 포함시킵니다.

---

Q8: Exclude와 Extract는 기본 제공 타입인가요?
A8:
네, 두 타입은 타입스크립트 내장 제네릭 타입 유틸리티로 `lib.es5.d.ts` 등 기본 라이브러리에 포함되어 있습니다.

---

요약
- `Exclude`: `T`에서 `U`와 겹치는 타입들을 제외(빼기)
- `Extract`: `T`와 `U`가 겹치는 타입만 추출(교집합)
두 타입 모두 타입 집합을 조작할 때 매우 유용한 조건부 타입 유틸리티입니다.
TypeScript는 JavaScript의 상위 집합으로, 정적 타입을 지원하여 코드의 안정성과 가독성을 높이는 데 도움을 줍니다.

TypeScript에서는 다양한 유틸리티 타입을 제공하는데, 그 중 `Exclude`와 `Extract`는 두 개의 중요한 유틸리티 타입입니다.

이 두 타입은 특정 타입 집합에서 다른 타입을 포함하거나 제외하는 데 사용됩니다.

하지만 그 목적과 사용 방식은 다릅니다.

Exclude `Exclude`는 주어진 타입 집합에서 특정 타입을 제외하는 데 사용됩니다.

이 유틸리티 타입은 두 개의 타입 인자를 받습니다: 첫 번째 인자는 원본 타입 집합이고, 두 번째 인자는 제외할 타입입니다.

결과적으로 `Exclude`는 첫 번째 타입 집합에서 두 번째 타입을 제거한 새로운 타입을 반환합니다.

예시 ```typescript type A = 'a' | 'b' | 'c'; type B = Exclude; // B는 'a' | 'c'가 됩니다.

``` 위의 예시에서 `A`는 `'a'`, `'b'`, `'c'`의 유니온 타입입니다.

`Exclude`는 `A`에서 `'b'`를 제외한 `'a' | 'c'` 타입을 반환합니다.

Extract 반면에 `Extract`는 주어진 타입 집합에서 특정 타입을 추출하는 데 사용됩니다.

`Extract` 역시 두 개의 타입 인자를 받습니다: 첫 번째 인자는 원본 타입 집합이고, 두 번째 인자는 포함할 타입입니다.

결과적으로 `Extract`는 첫 번째 타입 집합에서 두 번째 타입과 일치하는 타입만을 포함하는 새로운 타입을 반환합니다.

예시 ```typescript type A = 'a' | 'b' | 'c'; type B = Extract; // B는 'b' | 'c'가 됩니다.

``` 위의 예시에서 `Extract`는 `A`에서 `'b'`와 `'c'`를 추출하여 `'b' | 'c'` 타입을 반환합니다.

차이점 요약 1. 목적 : - `Exclude`: 특정 타입을 제외하여 새로운 타입을 생성합니다.

- `Extract`: 특정 타입을 추출하여 새로운 타입을 생성합니다.



2. 인자 : - 두 타입 모두 두 개의 인자를 받지만, `Exclude`는 첫 번째 타입에서 두 번째 타입을 제거하고, `Extract`는 첫 번째 타입에서 두 번째 타입과 일치하는 타입을 선택합니다.



3. 결과 : - `Exclude`는 주어진 타입 집합에서 특정 타입을 제거한 결과를 반환합니다.

- `Extract`는 주어진 타입 집합에서 특정 타입과 일치하는 타입만을 포함한 결과를 반환합니다.

결론 TypeScript의 `Exclude`와 `Extract`는 타입 조작을 위한 강력한 도구입니다.

이 두 유틸리티 타입을 이해하고 적절하게 사용하면, 복잡한 타입 구조를 보다 쉽게 관리하고, 코드의 가독성과 유지보수성을 높일 수 있습니다.

타입스크립트를 사용할 때 이러한 유틸리티 타입을 잘 활용하는 것이 중요하며, 이를 통해 더욱 안전하고 효율적인 코드를 작성할 수 있습니다.

작성자: 정하연 [비회원] | 작성일자: 1년 전 2024-09-10 05:32:14
조회수: 254 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.