[typescript] 타입 가드와 타입 어설션의 차이점
타입스크립트(TypeScript)에서는 타입 가드(Type Guard)와 타입 어설션(Type Assertion)을 사용하여 코드에서 타입을 보다 명확하게 지정하고 조작할 수 있습니다. 이 두 가지 개념은 유사해 보이지만, 각각 다른 목적과 사용 사례가 있습니다.
타입 가드 (Type Guard)
타입 가드는 런타임에 변수의 타입을 확인하고, 해당 변수의 타입을 추론하는 방법입니다. 주로 typeof
, instanceof
, 혹은 사용자 정의 함수를 활용하여 객체 또는 변수의 타입을 확인하는 데 사용됩니다. 가령, 다음과 같은 코드에서 instanceof
를 사용하여 객체의 타입을 확인하는 것이 타입 가드의 한 예입니다.
class Animal {
move() {
console.log('Moving...');
}
}
class Dog extends Animal {
bark() {
console.log('Woof Woof!');
}
}
function isDog(animal: Animal): animal is Dog {
return animal instanceof Dog;
}
const pet: Animal = new Dog();
if (isDog(pet)) {
pet.bark(); // 타입 가드로 인해 타입 추론이 가능
}
타입 어설션 (Type Assertion)
타입 어설션은 개발자가 컴파일러에게 “이 변수는 이 타입이다”라고 명시적으로 선언하는 방법입니다. 주로 <Type>
구문이나 as
키워드를 통해 이루어집니다. 아래의 예제에서 as
키워드를 사용하여 변수의 타입을 명시적으로 지정하는 것이 타입 어설션의 한 예입니다.
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length; // 타입 어설션으로 변수의 타입을 명시적으로 지정
결론
- 타입 가드는 주로 런타임에서 타입을 확인하고 조작하기 위해 사용되며, 보통 조건문과 함께 활용됩니다.
- 타입 어설션은 주로 컴파일러에게 개발자가 이미 알고 있는 타입을 명시적으로 알려주기 위해 사용되며, 주로 변수나 객체의 타입을 명시하기 위해 활용됩니다.
이 두 가지 기능을 적절히 활용하여 타입스크립트 코드를 보다 안정적이고 명확하게 작성할 수 있습니다.
관련 자료:
- 타입 가드: https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types
- 타입 어설션: https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#type-assertions