-
728x90
TypeScript는 타입 변환을 용이하게 하기 위해 전역으로 사용 가능한 유틸리티 타입을 제공한다.
Partial<T>
프로퍼티를 선택적으로 구성하여 일부만 사용 가능. 주어진 타입의 하위 타입 집합을 나타내는 타입 반환
interface User { name: string; age: number; } let person: Partial<User> = { name: 'john' } //Partial<User>는 아래와 같다. interface User { name: string; age?: number; }
Partial<User> 를 사용하면 age 프로퍼티가 없어도 에러가 발생하지 않는다.
Required<T>
T의 모든 프로퍼티가 필수로 설정된 타입 구성. Partial과 반대
interface User { name: string; age?: number; // 선택적 프로퍼티 } let person: Required<User> = { name: 'john' } //Property 'age' is missing in type '{ name: string; }' // Required<User>는 아래와 같다. interface User { name: string; age: number; }
age는 선택적 프로퍼티이지만 Required로 만들어진 타입은 모든 프로퍼티가 필수로 설정되며 age도 필수 프로퍼티가 되어 에러가 발생한다.
Readonly<T>
프로퍼티를 읽기 전용으로 설정한 타입 구성.
interface User { name: string; } let person: Readonly<User> = { name: 'john' } person.name = 'amy'; //Cannot assign to 'name' because it is a read-only property.ts(2540)
프로퍼티 생성 후 값 재할당 불가능
Record<K,T>
Type의 프로퍼티 집합 Keys로 타입 구성. 타입의 프로퍼티들을 다른 타입에 매핑시키는데 사용
interface PageInfo { title: string; } type Page = 'home'|'about'|'contact'; const x: Record<Page, PageInfo> = { // key: Page, Type: PageInfo about: {title: 'about'}, contact: {title: 'contact'}, home: {subTitle: 'home'}, //Type '{ subTitle: string; }' is not assignable to type 'PageInfo' main: {title: 'home'} //main: { title: string; }; }' is not assignable to type 'Record<Page, PageInfo>'. }
가지고 있지 않은 프로퍼티, 타입을 사용하면 에러 발생
x는 home, about, contact 프로퍼티만 가져야하며 home, about, contact는 title 프로퍼티를 가져야 한다.
Pick<T,K>
Type의 프로퍼티 Keys의 집합을 선택해 타입 구성
interface User { name: string; age: number; gender: 'M' | 'W'; } type keys = Pick<User, 'name' | 'age'> let person: keys = { name: 'john', age: 20, gender: 'M' //Type '{ name: string; age: number; gender: string; }' is not assignable to type 'Pick<User, keys>'. }
User에서 선택한 Key 프로퍼티만 추출
Omit<T,K>
Type의 모든 프로퍼티를 선택 후 Keys를 제거한 타입 구성. Pick 반대
interface User { name: string; age: number; gender: 'M' | 'W'; } type keys = Omit<User, 'gender'> let person: keys = { name: 'john', age: 20, }
Exclude<T,U>
T에서 U에 할당할 수 있는 모든 속성을 제외한 타입 구성.
type T1 = string | number | boolean; type T2 = Exclude<T1, number | string>; // boolean
T1에서 T2를 제외한 타입 구성
Extract<T,U>
T에서 U에 할당할 수 있는 모든 속성을 추출하여 타입 구성
type T1 = Extract<"a" | "b" | "c", "a" | "d">; // 'a' type T2 = Extract<string | number | (() => void), Function> // () => void
NonNullable<T>
Null과 Undefined를 제외한 타입
type T1 = string | null | undefined; type T2 = NonNullable<T1>; // string
Parameters<T>
함수타입 T의 매개변수 타입들의 튜플 타입 구성
declare function f1(arg: {a: number, b: string}): void type T1 = Parameters<() => string>; //[] type T2 = Parameters<(s: string) => void>; //[s: string] type T3 = Parameters<typeof f1>; // [arg:{a: number, b: string}]
ReturnType<T>
함수 T의 반환 타입으로 구성된 타입 생성
declare function f1(): {a: number, b: string} type T1 = ReturnType<() => string>; // string type T2 = ReturnType<(s: string) => void>; // void type T3 = ReturnType<typeof f1>; // {a: number, b: string}
'JavaScript, TypeScript' 카테고리의 다른 글
[JS] Fetch()로 formdata post 요청하기 (0) 2023.04.16 [JS] 자바스크립트에 Fetch() 함수로 HTTP 요청하기 (0) 2023.04.15 [TS] 타입스크립트 인터페이스(Interface) (0) 2023.04.01 [TS] 타입스크립트(TypeScript)란? (0) 2023.03.29 [JS] HTTP와 REST API (0) 2023.03.24 댓글