타입스크립트 타입 가드
타입 가드의 정의와 사용 이유, 종류 모음
정의
- 변수의 타입을 좁혀나가는 기법
- 런타임 시점에 변수의 타입을 체크하여 해당 타입으로 안전하게 사용할 수 있도록 도와줌
- 주로 유니온 타입(Union Type)을 다룰 때 유용하게 사용
사용하는 이유
- 런타임 에러 방지
- 코드 가독성 향상
종류
1. typeof
타입 가드
주로 기본형(primitive) 타입인지 체크할 때 사용
function printNumberOrString(value: number | string) {
if (typeof value === 'number') {
console.log('Number:', value)
} else if (typeof value === 'string') {
console.log('String:', value)
}
}
printNumberOrString(42) // Number: 42
printNumberOrString('Hello') // String: Hello
2. instanceof
타입 가드
일반 객체의 타입이나 클래스 또는 생성자 함수로 생성된 객체의 타입을 체크할 때 사용
class Dog {
bark() {
console.log('Woof!')
}
}
class Cat {
meow() {
console.log('Meow!')
}
}
function playSound(animal: Dog | Cat) {
if (animal instanceof Dog) {
animal.bark()
} else if (animal instanceof Cat) {
animal.meow()
}
}
const dog = new Dog()
const cat = new Cat()
playSound(dog) // Woof!
playSound(cat) // Meow!
3. 사용자 정의 타입 가드
is
를 사용해서 직접 검증할 수 있다.
interface Car {
make: string
model: string
}
interface Truck {
make: string
model: string
capacity: number
}
// 사용자 정의 타입 가드 함수
function isTruck(vehicle: Car | Truck): vehicle is Truck {
return 'capacity' in vehicle
}
function printVehicleInfo(vehicle: Car | Truck) {
console.log(`Make: ${vehicle.make}, Model: ${vehicle.model}`)
if (isTruck(vehicle)) {
console.log(`Capacity: ${vehicle.capacity}`)
}
}
const sedan: Car = { make: 'Toyota', model: 'Corolla' }
const pickupTruck: Truck = { make: 'Ford', model: 'F-150', capacity: 1000 }
printVehicleInfo(sedan) // Make: Toyota, Model: Corolla
printVehicleInfo(pickupTruck) // Make: Ford, Model: F-150, Capacity: 1000