Type Predicate

홍범선·2023년 10월 22일
0

타입스크립트

목록 보기
14/34
function isNumberRetBool(input: any): boolean{
  return typeof input === 'number';
}

위코드는 input을 any타입으로 받고(어떤 값이든 받아야 함으로) number타입이면 true인지 확인하는 코드이다.

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

여기서 type predicate를 써주자
왜 이렇게 작성해야 하나?라고 의문점이 생길 수 있다.

let number: any = 5;

if(isNumberRetBool(number)){
  number; //any타입 정확한 타입을 유추하지 못한다.
}

if(isNumber(number)){
  number; // number타입
}

any type으로 우리가 지정을 했음에도 type predicate를 사용하면 타입을 정확히 유추를 할 수 있게 된다.

interface Doge{
  name:string;
  age:number
}
interface Cat{
  name:string;
  breed:string;
}

type DogeOrCat = Doge | Cat;

function isDoge(animal: DogeOrCat) : animal is Doge{
  return (animal as Doge).age !== undefined;
}

const doge: DogeOrCat = {
  name : '도지',
  age : 32
}

if(isDoge(doge)){
  doge; // Doge타입
}else{
  doge // Never타입
}
//Doge인지 캐스팅을 해준다. 왜냐하면 age가 있는지 없는지 확인하기 위해서이다.
profile
알고리즘 정리 블로그입니다.

0개의 댓글