타입 별칭(Type Aliases)
- 의미없는 반복을 줄이고 타입을 명시적으로 사용하도록 돕는다
let
, const
를 선언해 변수를 초기화 하듯이 type
키워드로 사용 가능
type str = string;
type num = number;
type arr = num[];
type func = () => void;
type Person = {
name: str
age: num
counts: arr
getInfo: func
}
interface PersonInterFace {
name: str
age: num
counts: arr
getInfo: func
}
interface
와 type
의 차이
interface
는 컴파일러가 추론하려 하지만 type
은 추론하지 않음
interface
는 구조화 및 확장에 용이하지만 그에 비해 type
은 기능이 다양하지 않음
- 컴파일 결과도 다름
유니언(Union) 타입
- 둘을 합친 결과(합집합)
- Type Aliases와 자주 사용됨
type StringOrNumber = string | number
const a:StringOrNumber = 'str'
const b:StringOrNumber = 123
const c:StringOrNumber = boolean
type GenderType = 'M' | 'F'
type Person = {
name: string
age: number
}
type Me = {
name: string,
genderType: GenderType
}
const obj: Person | Me = {
name: 'YEZI',
age: 125
genderType : 'F'
}
유니언(Union) 타입 판별
- 무분별한 유니언 타입 사용은 타입을 추론하기 어렵다
때문에 타입 가드와 불필요한 타입을 다시 재조정하는 과정이 필요함
interface Male {
name: string;
age: number;
genderType: 'M';
}
interface Female {
name: string;
age: number;
genderType: 'F';
}
function createMale({ name, age, genderType }: Male | Female): Male {
return {name, age, genderType}
}
Intersection 타입
- 툴의 공통 분모(교집합)
- Type Aliases와 자주 사용됨
type StringAndNumber = string & number
const a:StringAndNumber = 'str'
const b:StringAndNumber = 123
const c:StringAndNumber = boolean
type GenderType = 'M' | 'F'
type Person = {
name: string
age: number
}
type Me = {
name: string,
genderType: GenderType
}
const obj: Person & Me = {
name: 'YEZI',
age: 125
}