타입스크립트에서 타입을 조합하는 방법은 무엇인가요?
_____A1: 타입스크립트에서는 `&` 연산자를 사용해 인터섹션 타입(intersection type)으로 여러 타입을 조합할 수 있습니다. 예를 들어, `type A = {a: string}; type B = {b: number}; type C = A & B;`는 `{a: string; b: number;}` 타입을 만듭니다.
---
Q2: 인터섹션 타입과 유니언 타입의 차이는 무엇인가요?
A2:
- 인터섹션 타입(`&`)은 모든 타입의 조건을 동시에 만족하는 타입입니다. 즉, 모든 속성을 포함해야 합니다.
- 유니언 타입(`|`)은 여러 타입 중 하나에 해당하면 됩니다. 예를 들어, `type U = string | number`는 문자열 또는 숫자로 받을 수 있습니다.
---
Q3: 유니언 타입으로 타입을 조합하려면 어떻게 하나요?
A3: `|` 연산자를 사용합니다. 예: `type Result = Success | Failure;` 여기서 `Success`와 `Failure`는 각각 다른 타입이며, `Result`는 둘 중 하나일 수 있습니다.
---
Q4: 인터페이스끼리 타입 조합은 어떻게 할 수 있나요?
A4: 인터페이스는 `extends` 키워드로 확장할 수 있습니다. 예:
```ts
interface A { a: string; }
interface B { b: number; }
interface C extends A, B {}
```
`C`는 `{ a: string; b: number }` 타입입니다.
---
Q5: 타입 별칭(type alias)끼리 조합도 가능한가요?
A5: 네, 타입 별칭도 `&`(인터섹션) 와 `|`(유니언)를 사용해 조합할 수 있습니다. 예:
```ts
type A = {a: string};
type B = {b: number};
type C = A & B;
```
---
Q6: 조합한 타입에서 특정 속성을 선택하거나 제외할 수 있나요?
A6: 네, `Pick
예:
type AB = A & B;
type OnlyA = Pick
type WithoutB = Omit
```
---
Q7: 조합된 타입 간 겹치는 속성이 충돌하면 어떻게 되나요?
A7: 인터섹션 타입에서 겹치는 속성이 있을 경우 두 타입이 모두 만족해야 하므로 타입이 호환되지 않으면 에러가 발생합니다. 예를 들어:
```ts
type A = { a: string };
type B = { a: number };
type C = A & B; // 에러: 'a' 속성이 string 과 number 로 충돌
```
---
Q8: 타입 조합에 조건부 타입도 사용 가능한가요?
A8: 네, 조건부 타입을 활용해 조합할 타입을 동적으로 선택하거나 변형할 수 있습니다. 예:
```ts
type Diff
```
---
Q9: 제네릭과 타입 조합을 같이 사용할 수 있나요?
A9: 네, 제네릭 타입과 `&` 또는 `|`를 함께 사용해 유연한 타입 조합이 가능합니다.
예:
```ts
type Response
```
---
Q10: 타입스크립트에서 타입 조합을 사용하는 좋은 사례는 무엇인가요?
A10: 여러 속성을 가지는 객체 타입을 정의할 때, 여러 인터페이스를 확장하거나 조합해 코드 재사용을 높이고, 함수 매개변수 타입에서 여러 조건을 동시에 만족하는 복합 타입을 정의할 때 주로 사용됩니다.
---
이상으로 타입스크립트에서 타입을 조합하는 주요 방법 및 관련 FAQ입니다.
타입스크립트에서 타입을 조합하는 방법은 여러 가지가 있으며, 이를 통해 복잡한 데이터 구조를 정의하고, 코드의 재사용성을 높일 수 있습니다.
아래에서는 타입 조합의 주요 방법에 대해 자세히 설명하겠습니다.
1. 유니온 타입 (Union Types) 유니온 타입은 여러 타입 중 하나를 허용하는 타입입니다.
`|` 기호를 사용하여 여러 타입을 조합할 수 있습니다.
```typescript type StringOrNumber = string | number; function printValue(value: StringOrNumber) { console.log(value); } printValue("Hello"); // 문자열 printValue(4
2); // 숫자 ```
2. 인터섹션 타입 (Intersection Types) 인터섹션 타입은 여러 타입을 결합하여 모든 타입의 속성을 포함하는 새로운 타입을 생성합니다.
`&` 기호를 사용하여 타입을 조합합니다.
```typescript interface Person { name: string; age: number; } interface Employee { employeeId: number; } type EmployeePerson = Person & Employee; const employee: EmployeePerson = { name: "John", age: 30, employeeId: 12345 }; ```
3. 제네릭 (Generics) 제네릭은 타입을 매개변수로 받아 다양한 타입에 대해 재사용 가능한 컴포넌트를 만들 수 있게 해줍니다.
제네릭을 사용하면 타입을 조합하여 더 유연한 코드를 작성할 수 있습니다.
```typescript function identity
2); ```
4. 튜플 (Tuples) 튜플은 고정된 수의 요소를 가지며 각 요소가 서로 다른 타입을 가질 수 있는 배열입니다.
이를 통해 여러 타입을 조합하여 사용할 수 있습니다.
```typescript type StringNumberTuple = [string, number]; const tuple: StringNumberTuple = ["Hello", 42]; ```
5. 타입 별칭 (Type Aliases) 타입 별칭을 사용하면 복잡한 타입을 간단하게 정의할 수 있습니다.
이를 통해 여러 타입을 조합하여 새로운 타입을 만들 수 있습니다.
```typescript type Point = { x: number; y: number; }; type Circle = Point & { radius: number; }; const circle: Circle = { x: 0, y: 0, radius: 5 }; ```
6. 맵드 타입 (Mapped Types) 맵드 타입은 기존 타입을 기반으로 새로운 타입을 생성하는 방법입니다.
이를 통해 객체의 속성을 변형하거나 추가할 수 있습니다.
```typescript type Person = { name: string; age: number; }; type ReadOnly
7. 조건부 타입 (Conditional Types) 조건부 타입은 타입이 특정 조건을 만족하는지에 따라 다른 타입을 선택할 수 있게 해줍니다.
```typescript type IsString
유니온 타입, 인터섹션 타입, 제네릭, 튜플, 타입 별칭, 맵드 타입, 조건부 타입 등을 적절히 활용하면 코드의 가독성과 재사용성을 높일 수 있습니다.
이러한 기능들을 잘 이해하고 활용하면 타입스크립트의 강력한 타입 시스템을 최대한 활용할 수 있습니다.
작성자:
김시윤 [비회원]
| 작성일자: 1년 전
2024-09-10 05:32:14
조회수: 235 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 235 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.