TypeScript에서 타입 가드(Type Guard)는 특정 코드 영역에서 변수의 타입을 좁혀서 타입 안전성을 보장하는 기능입니다.
타입 가드를 사용하면 런타임에서 타입 검사를 수행하여 예상치 못한 오류를 방지할 수 있습니다.
타입 가드는 주로 사용자 정의 타입 가드 함수와 타입 가드를 제공하는 TypeScript 내장 키워드 두 가지 방법으로 구현할 수 있습니다.
사용자 정의 타입 가드 함수는 주로 is
키워드를 사용하여 특정 타입을 확인하는 함수를 작성합니다.
interface Bird {
fly(): void;
layEggs(): void;
}
interface Fish {
swim(): void;
layEggs(): void;
}
function isFish(pet: Bird | Fish): pet is Fish {
return (pet as Fish).swim !== undefined;
}
위 예시에서 isFish 함수는 pet이 Fish 타입인지 확인하는 사용자 정의 타입 가드 함수입니다.
pet is Fish 반환 타입을 사용하여 타입 가드를 구현합니다.
TypeScript에는 타입 가드 기능을 제공하는 내장 키워드가 있습니다.
대표적으로 typeof
, instanceof
등이 있습니다.
typeof
변수의 타입을 검사할 때 사용합니다.
주로 기본 타입(string, number, boolean, symbol, undefined, object, function)을 확인하는 데 사용됩니다.
function padLeft(value: string, padding: string | number) {
if (typeof padding === "number") {
return Array(padding + 1).join(" ") + value;
} else {
return padding + value;
}
}
instanceof
객체가 특정 클래스의 인스턴스인지 확인할 때 사용합니다.
주로 사용자 정의 클래스를 확인하는 데 사용됩니다.
class Car {
start() {
console.log("Car started");
}
}
class Bicycle {
start() {
console.log("Bicycle started");
}
}
function start(vehicle: Car | Bicycle) {
if (vehicle instanceof Car) {
vehicle.start();
} else {
vehicle.start();
}
}
타입 가드는 TypeScript에서 변수의 타입을 좁혀서 타입 안전성을 보장하는 기능입니다.
사용자 정의 타입 가드 함수와 TypeScript 내장 키워드를 사용하여 타입 가드를 구현할 수 있습니다.
타입 가드를 사용하면 다양한 타입 조합에 대한 안전한 코드 처리가 가능해지고, 각 타입의 동작에 맞는 로직을 구현할 수 있습니다.
이를 통해 런타임 시 발생할 수 있는 오류를 최소화하고, 코드의 안정성과 가독성을 높일 수 있습니다.