[타입스크립트 #6] 유틸리티 타입

최훈오·2023년 11월 19일
0

데브코스

목록 보기
15/29
post-thumbnail

Partial

모든 속성을 명시하지 않아도 된다.

interface User {
  name: string
  age: number
}

const userA: User = {
  name: 'A' // 에러
}

cosnt userB : Partial<User> = { 
}

Required

모든 속성을 명시해야만 한다.

interface User {
  name: string
  age: number
}

const userA: User = {
  name: 'A',
  age: 12
}

cosnt userB : Required<User> = { // 에러
  name: 'B' 
}

Readonly

읽기 전용으로 만들 수 있다.

interface User {
  name: string
  age: number
}

const userA: User = {
  name: 'A',
  age: 12
}

cosnt userB : Readonly<User> = {
  name: 'B',
  age : 13
}

userA.name = 'AAA' // 에러
userB.name = 'BBB' // 에러

Record

유니온 타입을 받아 속성을 만들고 속성이 어떤 타입이 될지 명시하는 용도

type Names = 'neo' | 'lewis'
type RecordNames = {
  neo: number
  lewis: number
}

const developers: Records<Names, number> = {
  neo: 12,
  lewist: 13
}

Pick

하나의 객체 타입에서 원하는 속성으로 새로운 객체 타입을 만듬

interface User {
  name: string
  age: number
  email: string
  isValid: boolean
}

interface PickUser {
  name: string
  email: string
}

const user: Pick<User, 'name' | 'email'> = {
  name: 'Neo',
  email: 'gnsdh8616@naver.com',
  age: 26, // 에러
  isValid: false // 에러
}

userPickUser와 동일한 형식을 지닌다.

Omit

Pick과 반대되는 개념으로 원하는 속성을 생략해 새로운 객체 타입을 만듬.

interface User {
  name: string
  age: number
  email: string
  isValid: boolean
}

interface PickUser {
  age: number
  isValid: boolean
}

const user: Omit<User, 'name' | 'email'> = {
  name: 'Neo', // 에러
  age: 26, // 에러
  isValid: true
}

Exclude

유니온 타입에서 특정 타입을 제외함

type T = string | number | boolean

const a: Exclude<T, number> = 'Only string' // string | boolean
const b: Exclude<T, string | boolean> = 1234 // number

Extract

유니온 타입에서 특정 타입을 추출함

type T = string | number | boolean
type U = number | boolean | string[]

const a: Extract<T, U> = 123 // number | boolean
const b: Extract<T, U> = 'Only number' // number | boolean // 에러

서로 교차되는 타입으로 이루어진 새로운 타입 반환

ReturnType

어떤 타입이 반환되는 지 알 수 있는 타입

function hello(msg: string) {
  return `Hello ${msg}`  
}

const a: ReturnType<typeof hello> = 'Only string'
const b: ReturnType<typeof hello> = 1234 // 에러                    

Awaited

비동기에서 await해서 나오는 데이터의 타입을 알 수 있다.

;(async () => {
const promise = Promise.resolve(true)
console.log(await promise) // true
const a: Awaited<typeof promise> = 123 // 에러, boolean 타입 지정 됨
})()                 

0개의 댓글