타입스크립트에서 타입을 변환하는 유틸리티 타입은 무엇이 있나요?
_____Q1: 타입스크립트에서 유틸리티 타입이란 무엇인가요?
A1: 유틸리티 타입은 기존 타입을 조작하거나 변환하여 새로운 타입을 쉽게 만들 수 있도록 도와주는 내장 타입입니다. 복잡한 타입 정의를 간결하고 재사용 가능하게 작성할 수 있게 해줍니다.
---
Q2: 대표적인 타입 변환 유틸리티 타입에는 어떤 것들이 있나요?
A2: 대표적인 타입 변환 유틸리티 타입은 다음과 같습니다.
- `Partial
- `Required
- `Readonly
- `Pick
- `Omit
- `Record
- `Exclude
- `Extract
- `NonNullable
- `ReturnType
- `Parameters
- `ConstructorParameters
- `InstanceType
- `Awaited
---
Q3: `Partial
A3: `Partial
```ts
interface User {
id: number;
name: string;
}
type PartialUser = Partial
// { id?: number; name?: string; }
```
---
Q4: `Pick
A4:
- `Pick
- `Omit
예:
```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
```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
type AddParams = Parameters
```
---
Q7: `Exclude
A7:
- `Exclude
- `Extract
예:
```ts
type T = 'a' | 'b' | 'c';
type U = 'a' | 'c';
type ExcludeType = Exclude
type ExtractType = Extract
```
---
Q8: 객체 프로퍼티를 모두 읽기 전용으로 만들고 싶으면?
A8: `Readonly
```ts
interface User {
id: number;
name: string;
}
const user: Readonly
// user.id = 2; // 오류: 읽기 전용
```
---
Q9: Nullable 타입에서 null과 undefined를 제거하는 방법은?
A9: `NonNullable
```ts
type Nullable = string | null | undefined;
type NonNull = NonNullable
```
---
이 외에도 타입스크립트는 조합해서 쓸 수 있는 다양한 유틸리티 타입을 제공하므로, 필요에 따라 공식 문서([TypeScript Utility Types](https://www.typescriptlang.org/docs/handbook/utility-types.html))를 참고하는 것이 좋습니다.
이러한 유틸리티 타입은 코드의 재사용성을 높이고, 타입 안전성을 유지하면서도 다양한 상황에 맞게 타입을 변환할 수 있도록 도와줍니다.
아래에서는 타입스크립트에서 제공하는 주요 유틸리티 타입에 대해 자세히 설명하겠습니다.
1. `Partial
즉, `T`의 모든 속성이 선택적(`?`)으로 변환됩니다.
```typescript interface User { id: number; name: string; email: string; } const updateUser: Partial
2. `Required
즉, `T`의 모든 선택적 속성이 필수로 변환됩니다.
```typescript interface User { id: number; name?: string; } const user: Required
}; ```
3. `Readonly
즉, `T`의 모든 속성이 `readonly`로 변환됩니다.
```typescript interface User { id: number; name: string; } const user: Readonly
```
4. `Record
`K`는 문자열 또는 숫자 리터럴 타입이어야 합니다.
```typescript type UserRoles = 'admin' | 'user' | 'guest'; const roles: Record
5. `Pick
`K`는 `T`의 속성 이름의 집합입니다.
```typescript interface User { id: number; name: string; email: string; } type UserName = Pick
6. `Omit
`K`는 `T`의 속성 이름의 집합입니다.
```typescript interface User { id: number; name: string; email: string; } type UserWithoutEmail = Omit
7. `Exclude
주로 유니온 타입에서 특정 타입을 제거할 때 사용됩니다.
```typescript type A = 'a' | 'b' | 'c'; type B = Exclude; // 'b' | 'c' ```
8. `Extract
주로 유니온 타입에서 특정 타입을 추출할 때 사용됩니다.
```typescript type A = 'a' | 'b' | 'c'; type B = Extract; // 'a' | 'b' ```
9. `NonNullable
```typescript type A = string | null | undefined; type B = NonNullable; // string ```
10. `ReturnType
```typescript type Func = () => string; type Result = ReturnType
11. `InstanceType
```typescript class User { constructor(public name: string) {} } type UserInstance = InstanceType
이러한 타입들을 적절히 활용하면 코드의 가독성과 유지보수성을 높일 수 있으며, 타입 안전성을 보장할 수 있습니다.
작성자:
김주영 [비회원]
| 작성일자: 1년 전
2024-09-10 05:32:13
조회수: 283 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 283 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.