Backend/TypeScript

[TypeScript] type predicate (타입 프리디케이트)

누구세연 2024. 1. 7. 15:51

type predicate (타입 프레디케이트)

type predicate는  TypeScript에서 특정 타입에 대한 동적인 체크를 수행하는 함수입니다.

이 함수는 입력된 값이 특정 타입인지 여부를 불리언으로 반환합니다.

이를 통해 TypeScript는 실행 시간에 변수의 타입을 검사할 수 있게 됩니다.

 

단순한 숫자 타입 체크

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

console.log(isNumber(10));
  • 'isNumber' 함수는 입력값이 숫자인지 여부를 검사하는 타입 프레디케이트입니다.
  • 'input is number' 형태는 TypeScript에게 이 함수가 실행되면 'input'이 'number' 타입으로 판명된다는 것을 알려줍니다.

 

Boolean 반환 타입으로 일반적인 타입 체크

function isNumberRetBool(input: any): boolean{
    return typeof input === 'number';
}

let number: any = 5;

if(isNumberRetBool(number)){
    number;
}
  • 'isNumberRetBool' 함수는 입력값이 숫자인지를 불리언으로 반환합니다.
  • 이 함수를 사용하여 'number' 변수의 타입을 체크하고, 'number' 변수를 안전하게 사용할 수 있습니다.

 

객체의 속성을 기반으로 한 인터페이스 타입 체크

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 = Math.random() > 0.5 ? {
    name: '도지',
    age: 20,
} : {
    name: '오리',
    breed: '코리안 길냥이'
}

if(isDoge(doge)){
    doge; //doge는 Doge 타입으로 추론됩니다.
}else{
    doge; //doge는 Cat 타입으로 추론됩니다.
}
  • 'isDoge' 함수는 'DogeOrCat' 타입의 객체가 'Doge'인지를 검사합니다.
  • 함수의 반환 타입 'animal is Doge'는 TypeScript에게 이 함수를 통해 'DogeOrCat' 타입이 'Doge'로 추론되어야 한다는 것을 알려줍니다.
  • 따라서 'isDoge' 함수를 사용하면 'doge' 객체의 타입이 조건에 따라 정확하게 추론됩니다.

 

TypeScript는 이러한 유형의 타입 검사를 활용하여 코드 안정성을 높이고, 코드의 의도를 더 명확하게 전달할 수 있도록 합니다.