저번 포스트 소개하는 않았지만 그럼에도 유용한 유틸리티 타입들이 많아서 추가적으로 몇가지 소개하고자 한다.
keyof
키워드는 특정 interface에서 key들만 union 형태로 받을 수 있다. 아래 예시를 보면 인터페이스의 key 값들만 받아서 하나의 타입으로 사용할 때, 유용하게 쓰일 수 있음을 알 수 있다.
interface Player {
name: string
position: string
age: number
national: 'EU' | 'Non-EU'
}
type PlayerKey = keyof Player
// 'name' | 'position' | 'age' | 'national'
레코드(Record) 타입은 두개의 제네릭 타입을 받을 수 있고, Record<K,T>
의 형태로 자주 쓰인다. 특히 key-value 형태의 값을 짝지어 사용할 때 유용하게 쓰일 수 있다.
type team = 'Chelsea' | 'Arsenal' | 'ManUtd' | 'ManCity' | 'Liverpool'
type rank = '1' | '2' | '3' | '4' | '5'
const CurrentRank: Record<team, rank> = {
Chelsea: 1,
ManCity: 2,
Liverpool: 3,
ManUtd: 4,
Arsenal: 5,
}
interface Player = {
name: string,
age: number,
position : string
}
const isValid = (player : Player) => {
const result : Record<keyof Player, boolean> = {
name : player.name !== '',
age: player.age >0,
position : player.position !==''
}
return result
}
익스클루드(Exclude) 타입은 두 개의 제네릭 타입을 받아서 Exclude<T1,T2>
와 같은 형태로 쓰이고 T1에서 T2를 제거하고 사용하는 방식이다. Omit과 다른 점은 프로퍼티가 아닌 타입으로 제거한다는 것이다.
type T1 = string | number
type T2 = Exclude<T1, number> // string
type T1 = string | number | boolean
type T2 = Exclude<T1, number | string> // boolean
논널러블(NonNullable) 타입은 NonNullable<T>
과 같은 형태로 쓰이며, Null로 처리되는 타입과 undefined를 제거한다.
type T1 = string | null | undefined | void
type T2 = NonNullable<T1> // string | void
간단하게만 정리해봤는데, 타입스크립트를 계속 사용하다 보면 충분히 많이 쓸 수 있을만한 타입들이 많다고 느껴졌고, 이것들에 익숙해지면 좀 더 능숙하게 타입스크립트를 다룰 수 있겠다는 생각이 들었다.
출처