[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; // 타입 어설션으로 변수의 타입을 명시적으로 지정

결론

이 두 가지 기능을 적절히 활용하여 타입스크립트 코드를 보다 안정적이고 명확하게 작성할 수 있습니다.

관련 자료: