은도미
은도미 개발일지
은도미
전체 방문자
오늘
어제
  • 분류 전체보기 (46)
    • DAILY (0)
    • BOOKS (0)
    • STUDY (17)
      • 면접준비 (3)
      • 모던 자바스크립트 Deep Dive (10)
      • Git (1)
    • PROGRAMING (14)
      • HTML (0)
      • CSS (0)
      • JS (0)
      • TYPESCRIPT (7)
      • NODE.JS (2)
      • Express.js (1)
      • React (3)
      • Nextjs (1)
    • ALGORITHM (5)
      • JS (1)
      • PYTHON (3)
      • 백준 (0)
      • 프로그래머스 (0)
      • 기타 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ㅂ

최근 댓글

최근 글

티스토리

은도미

은도미 개발일지

PROGRAMING/TYPESCRIPT

TypeScript 03 Utility types

2021. 11. 24. 15:24

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
    'PROGRAMING/TYPESCRIPT' 카테고리의 다른 글
    • TypeScript 05 클래스와 인터페이스
    • TypeScript 04 함수 사용
    • TypeScript 02 TypeScript의 기본 Type
    • TypeScript 01 개요
    은도미
    은도미
    아름다움은 매일 있어.
    hELLO. 티스토리 스킨을 소개합니다.
    제일 위로

    티스토리툴바