[Typescript] 코딩앙마 강의 #8 유틸리티 타입 (Utility Types)

Yuzu·2023년 6월 15일
0

유틸리티 타입

  • TypeScript는 일반적인 타입 변환을 쉽게 하기 위해서 몇 가지 유틸리티 타입을 제공합니다. 이러한 유틸리티는 전역으로 사용 가능합니다.
예제용 인터페이스

interface User {
	id: number;
    name: string;
    age: number;
    gender: "m" | "f";
    }

1. keyof

: 인터페이스의 키 값들을 유니온 형태로 받을 수 있음

type UserKey = keyof User; // 'id' | 'name' | 'age' | 'gender'

const uk: UserKey = "age";
const uk2: UserKey = "name";
.
.  

2. Partial< T >

: 프로퍼티를 모두 옵션으로 바꿔준다. 그래서 일부만 사용하는게 가능해진다.

let admin: Partial<User> = {
	id: 1,
    name: "Bob",
    };

3. Required< T >

: 모든 프로퍼티를 필수로 바꿔준다. (option처리 된 프로퍼티도 필수가 된다.)

let admin: Required<User> = {
	id: 1,
    name: "Bob",
    age: 20,
    gender: "m",
    };

4. Readonly< T >

: 읽기전용으로 바꿔준다.

let admin: Readonly<User> = {
	id: 1,
    name: "Bob",
    age: 20,
    gender: "m",
    };
    
admin.id = 4; // 에러, readonly이므로 수정 불가

5. Record<K,T>

  • K = key, T = type
예제 1)

interface Score {
"1": "A" | "B" | "C" | "D";
"2": "A" | "B" | "C" | "D";
"3": "A" | "B" | "C" | "D";
"4": "A" | "B" | "C" | "D";

const score:Score = {
	1:"A",
	2:"B",
    3:"C",
    4:"D",
};

===

const score: Record<"1" | "2" | "3" | "4", "A" | "B" | "C" | "D"> = {
	1:"A",
	2:"C",
    3:"B",
    4:"D",
};

===

type Grade = "1" | "2" | "3" | "4";
type Score = "A" | "B" | "C" | "D"
const score: Record<Grade, Score> = {
	1:"A",
	2:"C",
    3:"B",
    4:"D",
};
예제 2)

 interface User {
 	id: number;
    name: string;
    age: number;
    }
    
function isValid(user:User){
	const result: Record<keyof User, boolean>= {
		id: user.id > 0,
		name: user.name !== '',
        age: user.age > 0
       }
     return result;
   }

6. Pick<T,K>

: T type에서 K 프로퍼티만 골라서(pick해서) 사용

interface User {
	id: number;
    name: string;
    age: number;
    gender: "m" | "f";
    }
    
const admin: Pick<User, "id" | "name"> = { // User에서 id,name 만 사용
	id: 0,
    name: "Bob",
    };
    

7. Omit<T,K>

: 특정 프로퍼티를 생략하고 사용

const admin: Omit<User, "age" | "gender"> = { // User에서 age, gender 제외하고 사용
	id: 0,
    name: "Bob",
    };

8. Exclude<T1, T2>

: T1(type 1) 에서 T2(type 2)를 제외하고 사용하는 방식 (겹치는 부분을 제거)

  • Omit 과 다른 점은 프로퍼티를 제거하는 것이 아닌 타입으로 제거한다.
type T1 = string | number | boolean;
type T2 = Exclude<T1, number | string>;

9. NonNullable< Type >

: null과 undefined 를 제외한 type을 생성한다.

type T1 = string | null | undefined | void;
type T2 = NonNullable< T1 >
profile
냐하

0개의 댓글