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

타입스크립트에서 타입을 변환하는 유틸리티 타입은 무엇이 있나요?

_____
타입스크립트에서 타입을 변환하는 유틸리티 타입 FAQ

Q1: 타입스크립트에서 유틸리티 타입이란 무엇인가요?
A1: 유틸리티 타입은 기존 타입을 조작하거나 변환하여 새로운 타입을 쉽게 만들 수 있도록 도와주는 내장 타입입니다. 복잡한 타입 정의를 간결하고 재사용 가능하게 작성할 수 있게 해줍니다.

---

Q2: 대표적인 타입 변환 유틸리티 타입에는 어떤 것들이 있나요?
A2: 대표적인 타입 변환 유틸리티 타입은 다음과 같습니다.

- `Partial`: 모든 프로퍼티를 선택적(optional)으로 변환
- `Required`: 모든 프로퍼티를 필수(required)로 변환
- `Readonly`: 모든 프로퍼티를 읽기 전용(readonly)으로 변환
- `Pick`: 타입 `T`에서 특정 프로퍼티 `K`만 선택하여 새로운 타입 생성
- `Omit`: 타입 `T`에서 특정 프로퍼티 `K`를 제외한 타입 생성
- `Record`: 키 `K`와 값 타입 `T`를 가지는 객체 타입 생성
- `Exclude`: 타입 `T`에서 `U`에 할당되는 타입 제거
- `Extract`: 타입 `T`에서 `U`에 할당 가능한 타입만 추출
- `NonNullable`: `null`과 `undefined`를 제거한 타입 생성
- `ReturnType`: 함수 타입 `T`의 반환 타입 추출
- `Parameters`: 함수 타입 `T`의 매개변수 타입들을 튜플 형태로 추출
- `ConstructorParameters`: 생성자 함수 타입 `T`의 매개변수 타입을 튜플로 추출
- `InstanceType`: 생성자 함수 타입 `T`의 인스턴스 타입 추출
- `Awaited`: Promise나 그 외의 대기 가능한 타입을 풀어낸 타입 (비동기 함수 반환 타입 처리)

---

Q3: `Partial`는 어떻게 사용하나요?
A3: `Partial`는 타입 `T`의 모든 프로퍼티를 optional로 바꿉니다. 예를 들어:

```ts
interface User {
id: number;
name: string;
}

type PartialUser = Partial;
// { id?: number; name?: string; }
```

---

Q4: `Pick`와 `Omit`의 차이는 무엇인가요?
A4:
- `Pick`: 타입 `T`에서 지정한 키 `K` 프로퍼티만 추출해 새 타입 생성
- `Omit`: 타입 `T`에서 지정한 키 `K` 프로퍼티만 제외한 새 타입 생성

예:

```ts
interface User {
id: number;
name: string;
age: number;
}

type UserNameAge = Pick;
// { name: string; age: number; }

type UserWithoutAge = Omit;
// { id: number; name: string; }
```

---

Q5: `Record`는 언제 사용하나요?
A5: `Record`는 특정 키 집합 `K`에 대해 모두 동일한 값 타입 `T`를 갖는 객체 타입을 만들 때 사용합니다. 예:

```ts
type Roles = 'admin' | 'user' | 'guest';

const rolePermissions: Record = {
admin: 3,
user: 2,
guest: 1,
};
```

---

Q6: 제네릭 타입에서 반환 타입이나 파라미터 타입을 얻고 싶을 때는 어떤 유틸리티를 사용하나요?
A6:
- 반환 타입은 `ReturnType`
- 함수 파라미터 타입은 `Parameters`
예:

```ts
function add(x: number, y: number): number {
return x + y;
}

type AddReturn = ReturnType; // number
type AddParams = Parameters; // [number, number]
```

---

Q7: `Exclude`와 `Extract`는 어떻게 다르나요?
A7:
- `Exclude`: `T`에서 `U`에 할당 가능한 타입을 제거
- `Extract`: `T`에서 `U`에 할당 가능한 타입만 추출

예:

```ts
type T = 'a' | 'b' | 'c';
type U = 'a' | 'c';

type ExcludeType = Exclude; // 'b'
type ExtractType = Extract; // 'a' | 'c'
```

---

Q8: 객체 프로퍼티를 모두 읽기 전용으로 만들고 싶으면?
A8: `Readonly`를 사용합니다.

```ts
interface User {
id: number;
name: string;
}

const user: Readonly = { id: 1, name: 'Alice' };
// user.id = 2; // 오류: 읽기 전용
```

---

Q9: Nullable 타입에서 null과 undefined를 제거하는 방법은?
A9: `NonNullable`를 사용합니다.

```ts
type Nullable = string | null | undefined;
type NonNull = NonNullable; // string
```

---

이 외에도 타입스크립트는 조합해서 쓸 수 있는 다양한 유틸리티 타입을 제공하므로, 필요에 따라 공식 문서([TypeScript Utility Types](https://www.typescriptlang.org/docs/handbook/utility-types.html))를 참고하는 것이 좋습니다.
타입스크립트(TypeScript)에서는 타입 변환을 위한 여러 유틸리티 타입을 제공합니다.

이러한 유틸리티 타입은 코드의 재사용성을 높이고, 타입 안전성을 유지하면서도 다양한 상황에 맞게 타입을 변환할 수 있도록 도와줍니다.

아래에서는 타입스크립트에서 제공하는 주요 유틸리티 타입에 대해 자세히 설명하겠습니다.

1. `Partial` `Partial`는 주어진 타입 `T`의 모든 속성을 선택적으로 만듭니다.

즉, `T`의 모든 속성이 선택적(`?`)으로 변환됩니다.

```typescript interface User { id: number; name: string; email: string; } const updateUser: Partial = { name: "Alice" }; ```

2. `Required` `Required`는 주어진 타입 `T`의 모든 속성을 필수로 만듭니다.

즉, `T`의 모든 선택적 속성이 필수로 변환됩니다.

```typescript interface User { id: number; name?: string; } const user: Required = { id: 1, name: "Alice" // name은 이제 필수입니다.

}; ```

3. `Readonly` `Readonly`는 주어진 타입 `T`의 모든 속성을 읽기 전용으로 만듭니다.

즉, `T`의 모든 속성이 `readonly`로 변환됩니다.

```typescript interface User { id: number; name: string; } const user: Readonly = { id: 1, name: "Alice" }; // user.name = "Bob"; // 오류: 읽기 전용 속성입니다.

```

4. `Record` `Record`는 키 `K`와 값 `T`의 쌍으로 이루어진 객체 타입을 생성합니다.

`K`는 문자열 또는 숫자 리터럴 타입이어야 합니다.

```typescript type UserRoles = 'admin' | 'user' | 'guest'; const roles: Record = { admin: "Administrator", user: "Regular User", guest: "Guest User" }; ```

5. `Pick` `Pick`는 주어진 타입 `T`에서 특정 속성 `K`만 선택하여 새로운 타입을 생성합니다.

`K`는 `T`의 속성 이름의 집합입니다.

```typescript interface User { id: number; name: string; email: string; } type UserName = Pick; // { name: string } ```

6. `Omit` `Omit`는 주어진 타입 `T`에서 특정 속성 `K`를 제외한 새로운 타입을 생성합니다.

`K`는 `T`의 속성 이름의 집합입니다.

```typescript interface User { id: number; name: string; email: string; } type UserWithoutEmail = Omit; // { id: number; name: string; } ```

7. `Exclude` `Exclude`는 타입 `T`에서 타입 `U`에 해당하는 타입을 제외한 새로운 타입을 생성합니다.

주로 유니온 타입에서 특정 타입을 제거할 때 사용됩니다.

```typescript type A = 'a' | 'b' | 'c'; type B = Exclude; // 'b' | 'c' ```

8. `Extract` `Extract`는 타입 `T`에서 타입 `U`에 해당하는 타입만 추출하여 새로운 타입을 생성합니다.

주로 유니온 타입에서 특정 타입을 추출할 때 사용됩니다.

```typescript type A = 'a' | 'b' | 'c'; type B = Extract; // 'a' | 'b' ```

9. `NonNullable` `NonNullable`는 주어진 타입 `T`에서 `null`과 `undefined`를 제외한 새로운 타입을 생성합니다.

```typescript type A = string | null | undefined; type B = NonNullable; // string ```

10. `ReturnType` `ReturnType`는 함수 타입 `T`의 반환 타입을 추출합니다.

```typescript type Func = () => string; type Result = ReturnType; // string ```

11. `InstanceType` `InstanceType`는 생성자 함수 타입 `T`의 인스턴스 타입을 추출합니다.

```typescript class User { constructor(public name: string) {} } type UserInstance = InstanceType; // User ``` 이와 같은 유틸리티 타입들은 타입스크립트에서 타입을 변환하고 조작하는 데 매우 유용합니다.

이러한 타입들을 적절히 활용하면 코드의 가독성과 유지보수성을 높일 수 있으며, 타입 안전성을 보장할 수 있습니다.

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