개발이야기

[TIL]27.타입스크립트 Type Predicate

무서운승태 2023. 11. 21. 21:12
728x90

타입스크립에서 Type Predicate라는 개념이 있다. 다음과 같은 함수가 있다고 하자.

// 왜 이렇게 사용하면 안될까??
function isNumberBool(input: any): boolean {
  return typeof input === "number";
}

isNumberBool 함수의 리턴값을 boolean으로 선언하였다. 그냥 보면 문제가 없어보인다. 그러나 사용하면 조금 불편한 점이 생긴다.

 

let num: any = 5;

if (isNumberBool(num)) {
  num; // type이 any임
}

num에 대한 체크후 num을 number로 사용하려고 할때 문제가 생긴다 any타입으로 되어서 또 casting이 필요하다.

 

function isNumber(input: any): input is number {
  return typeof input === "number";
}

let num: any = 5;

if (isNumber(num)) {
  num; 
  // predicate를 사용해주면 안에서 number로 바뀜
  // 정확한 타입을 유추할수있다!!
  // 일반적으로 하면 유추하기 힘들다.
}