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가 있는지 없는지 확인하기 위해서이다.