//value에는 number와 string이 들어올 수 있지만 반환은 string만 가능
function print(value: number | string): string {
if (typeof value === 'number') {
return String(value)
}
if (typeof value === 'string') {
return value
}
return value
}
interface Dog {
name: string
bark(): '멍멍'
}
interface Cat {
name: string
meow(): '냐옹'
}
function sayAnimal(animal: Dog | Cat) {
if ('bark' in animal) {
animal.bark()
animal.name
}
if ('meow' in animal) {
animal.meow()
}
}
function getDate(date: Date | string): Date {
if (date instanceof Date) {
return date
}
return new Date(date)
}
위에서 사용한 getDate함수의 date instanceof Date
부분을 사용자가 정의할 수 있습니다.
//1. 보통 접두사에 is라는 프리픽스를 붙입니다.
//2. 매개변수는 필수입니다.
function isDate(date: Date | string): 매개변수 is 타입 {
return date instanceof Date
}
function isDate(date: Date | string): date is Date {
return date instanceof Date
}
function getDate(date: Date | string): Date {
//위에서 정의한 부분을 재활용합니다.
if (isDate(date)) {
return date
}
return new Date(date)
}