[typescript] 타입 가드의 종류
타입 가드(Type Guards)는 TypeScript에서 특정 타입인지를 체크하고, 그 타입에 따라 다른 동작을 수행할 수 있도록 하는 도구입니다. 타입 가드는 다양한 방식으로 구현될 수 있으며, 다양한 상황에 맞게 사용할 수 있습니다.
이 글에서는 TypeScript에서의 다양한 타입 가드의 종류에 대해 알아보겠습니다.
1. 타입 체킹 함수
타입 체킹 함수는 주어진 값이 특정 타입에 속하는지를 확인하고, 해당 타입으로 형변환할 수 있도록 하는 함수입니다.
예를 들어, 다음과 같이 isNumber
라는 타입 체킹 함수를 만들어 사용할 수 있습니다.
function isNumber(value: any): value is number {
return typeof value === 'number';
}
let someValue: any = 5;
if (isNumber(someValue)) {
console.log('The value is a number.');
} else {
console.log('The value is not a number.');
}
2. instanceof
키워드
instanceof
키워드는 객체가 해당 클래스나 생성자 함수로부터 생성되었는지를 확인할 때 사용됩니다. 이를 활용하여 해당 객체의 타입을 확인할 수 있습니다.
예를 들어, 다음과 같이 Animal
클래스의 인스턴스인지를 확인할 수 있습니다.
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
}
class Dog extends Animal {
breed: string;
constructor(name: string, breed: string) {
super(name);
this.breed = breed;
}
}
let dog = new Dog('Buddy', 'Golden Retriever');
if (dog instanceof Animal) {
console.log('The dog is an instance of Animal.');
} else {
console.log('The dog is not an instance of Animal.');
}
3. 사용자 정의 타입 가드
사용자 정의 타입 가드는 개발자가 직접 정의한 함수를 사용하여 타입을 체크하는 방식입니다. 이를 활용하여 자신만의 타입 가드를 정의하고 사용할 수 있습니다.
예를 들어, 다음과 같이 사용자 정의 타입 가드를 만들고 사용할 수 있습니다.
interface Circle {
kind: 'circle';
radius: number;
}
interface Square {
kind: 'square';
sideLength: number;
}
type Shape = Circle | Square;
function isCircle(shape: Circle | Square): shape is Circle {
return (shape as Circle).kind === 'circle';
}
function getArea(shape: Shape) {
if (isCircle(shape)) {
return Math.PI * shape.radius ** 2;
} else {
return shape.sideLength ** 2;
}
}
결론
타입 가드를 활용하면 TypeScript에서 좀 더 안전하고 예측 가능한 코드를 작성할 수 있습니다. 다양한 타입 가드를 적절히 활용하여 코드의 가독성과 안정성을 높일 수 있습니다.
본문은 TypeScript 버전 4.4 기준으로 작성되었습니다.