TypeScript는 공통 타입 변환을 용이하기 하기 위해 유틸리티 타입을 제공한다.
전역으로 사용 가능하다.
- Partial<T> : T의 프로퍼티를 선택적으로 구성할 수 있습니다.
- Readonly<T> : T의 프로퍼티를 읽기 전용으로 설정하여, 값을 재할당하는 경우 에러가 발생합니다.
- Record<T, K> : 프로퍼티 키를 K, 값을 T로 하는 타입을 만들 수 있습니다.
- 여러 키들을 지정하기 위해 타입을 선언한 방식(type Page = 'home' | 'about' | 'contact';)처럼 두 개 이상의 타입을 선언하는 방식을 유니온 타입이라고 합니다.
- Pick<T, K> : T 타입 중에서 K 프로퍼티만 지정하여 타입을 만들 수 있습니다.
- Omit<T, K> : T 타입의 모든 프로퍼티 중 K를 제거하여 타입을 구성합니다.
- Exclude<T, U> : 타입 T에서 U와 겹치는 타입을 제외한 타입을 구성합니다.
- Extract<T, U> : 타입 T에서 U와 겹치는 타입만 포함하여 타입을 구성합니다.
- NonNllable<T> : T 타입에서 null과 undefined를 제외한 타입을 구성합니다.
- Parameter<T> : 함수 타입 T의 매개변수의 타입들의 튜플로 타입을 구성합니다.
- ConstructorParameters<T> : 클래스의 생성자를 비롯한 생성자 타입의 모든 매개변수 타입을 추출합니다.
- ReturnType<T> : 함수 T가 반환한 타입으로 타입을 구성합니다.
- Required<T> : 타입 T의 모든 프로퍼티가 필수로 설정된 타입을 구성합니다.
1. Partial<T>
T의 모든 프로퍼티를 선택적으로 만드는 타입을 구성한다.
interface User {
id: number;
name: string;
age: number;
gender: 'm' | 'f'
}
//keyof : type, interface 내부의 키를 반환한다.
type UserKey = keyof User; // 'id' | 'name' | 'age' | 'gender'
const uk:UserKey = 'temp' //오류 발생
const uk:UserKey = 'name' //오류 발생
let admin: Partial<User> = {
id: 1,
name: 'Bob'
}
interface Todo {
title: string
description: string
}
// obj매개변수 타입에 Partial Utility types을 추가해주세요
function updateTodo(obj: Partial<Todo>) {
return obj;
}
const result = updateTodo({
title: "title",
})
console.log(result); // { title: 'title' } 출력
2. Readonly<T>
T의 모든 프로퍼티를 읽기전용(readonly)로 설정한 타입을 구성한다.
interface Todo {
title: string
}
const todo: Readonly<Todo> = {
title: 'Delete inactive users'
}
todo.title = 'Hello'; //오류 : todo 객체가 ReadOnly 상태인데 재할당 하여 오류 발생
3. Recode<T>
프로퍼티의 집합 K로 타입을 구성한다. 타입의 프로퍼티들을 다른 타입에 매핑시키는데 사용
interface PageInfo {
title: string;
}
type Page = 'home' | 'about' | 'contact';
const x: Record<Page, PageInfo> = {
about: { title: 'about' },
contact: { title: 'contact' },
home: { subTitile: 'home’}, // 오류: PageInfo에 subTitle이 없기 때문
main: { title: 'home' }, // 오류 : page에 main이라는 변수가 없기 때문
4. Pick<T,K>
T에서 프로퍼티K의 집합을 선택하여 타입을 구성
interface User {
id: number;
name: string;
age: number;
gender: 'M' | 'W';
}
const admin: Pick<User, 'id' | 'name'> = {
id: 0,
name: 'Bob'
age : 10 //오류 : 프로퍼티K에는 Age:10이 없기 때문
}
5. Omit<T,K>
T에서 프로퍼티 K의 집합을 제외해 타입을 구성한다.
interface User {
id: number;
name: string;
age: number;
gender: 'M' | 'W';
}
const admin: Omit<User, 'age' | 'gender'> = {
id: 0,
name: 'Bob',
age : 10 //오류 : age는 제거되었으나 나와이기 때문.
}
5. Exclue<T,U>
T에서 U에 할당할 수 있는 모든 속성을 제외한 타입을 구성한다.
type T0=Exclude<"a"|"b"|"c","a">; //"b"|"c"
type T1 = string | number | boolean;
type T2 = Exclude<T1, number | string>
let isNum: T2 = 3 // error
let isBool: T2 = true;
6. Extract<T,U>
T에서 U에 할당할 수 있는 모든 속성을 추출하여 타입을 구성한다.
type T0=Exclude<"a"|"b"|"c","a"|"f">; //"a"
7. NonNullable<T>
T에서 null과 undefined를 제외한 타입이다
type T1 = string | null | undefined | void;
type T2 = NonNullable<T1>
let empty: T2 = null; //오류 : null이 포함되어있으므로
let product: T2 = 'scissor';
8. Parameters<T>
함수 타입 T의 매개변수 타입들을 튜플타입으로 구성한다.
function f1(arg: { a: number, b: string }):void
type T0 = Parameters<() => string>; // []
type T1 = Parameters<(s: string) => void>; //[string]
type T4 = Parameters<typeof f1>; //[{ a:number, b: string }]
type T5 = Parameters<never>; // any
type T6 = Parameters<never>; // never
type T7 = Parameters<string>; // error
type T8 = Parameters<Function>; // error
9. ReturnType<T>
함수 T의 반환 타입으로 구성된 타입을 생성
declare function f1(): { a: number, b: string }
type T0 = ReturnType<() => string>; // string
type T1 = ReturnType<(s: string) => void>; //void
type T2 = ReturnType<(<T>() => T)>; // {}
type T4 = ReturnType<typeof f1>; // { a:number, b: string }
type T5 = ReturnType<any>; // any
type T6 = ReturnType<never>; // any
type T7 = ReturnType<string>; // 오류
type T8 = ReturnType<Function>; // 오류
10. Required<T>
함수 T의 반환 타입으로 구성된 타입을 생성
interface Props {
a?: number;
b?: string;
};
const obj: Props = { a: 5 };
const obj2: Required<Props> = { a: 5 }; //오류: b 프로퍼티가 없어서
'PROGRAMING > TYPESCRIPT' 카테고리의 다른 글
TypeScript 06 인터페이스 (0) | 2021.11.26 |
---|---|
TypeScript 05 클래스와 인터페이스 (0) | 2021.11.24 |
TypeScript 04 함수 사용 (0) | 2021.11.24 |
TypeScript 02 TypeScript의 기본 Type (0) | 2021.11.24 |
TypeScript 01 개요 (0) | 2021.11.24 |