런타임 환경(실행 환경)에서 타입을 가드하는 방법들
방법1 - 파라미터 a에 string, number 인 경우가 존재할 수 있다.
function doubleTypeFuntion(a: string | number) {
if (typeof a === 'string') {
return a.replace('x', 'X');
}
// if 문 밖은 무조건 number 인 경우만 존재하기 때문에 replace() 사용X
return a.replace('Y', 'y'); // (X)
}
doubleTypeFuntion(10);
방법2 - 파라미터 a에 number, null 타입 외 에도 a?로 undefined 도 존재할 수 있다.
function foo(a?: number | null) {
if (a === null) return;
console.log('display before');
//console.log(a.valueOf()); // undefined 인 경우 valueOf() 사용X
console.log(a?.valueOf());// 좋은 방법X
console.log('display after');
}
foo();
방법3 - 인터페이스 or 타입Alias를 가지고 타입을 검사할 수 있다.
interface Foo {
foo: string;
common: string;
}
type Foo2 = string;
// 타입 검사 함수
function isFoo(arg: any): arg is Foo { // return 타입 정의가 아니라 arg 인자 타입 정의
return arg.foo !== undefined;
}
console.log(isFoo({ foo: 'ok', common: 'wow', active: false }));
// 단점: active 의 새로운 요소를 추가하면 타입 가드 에서 확인하지 못한다.