네로잉, 일명 타입 좁히기
란 무엇일까?
유니온 타입처럼 여러 타입이 될 수 있는 경우 이 타입도, 저 타입도 확정이 되어 있지 않은 상태라고 볼 수 있다.
이때 타입을 하나로 확정 시켜주는 것을 Narrowing
이라고 칭한다.
타입을 좁힐 때 사용하는 방법 중 하나이다.
typeof 연산자를 사용해서 특정 타입일 때 로직을 실행하도록 조건을 주는 방법이 있다.
function fx(a : number | string){
if(typeof a === 'number'){
return a + 1;
}else {
return a + 1;
}
}
함수의 파라미터로 number 또는 string 타입이 될 수 있는 a가 인수로 들어올 때 해당 타입에 따라서 리턴 값을 만들어 주었다.
function fx(a : number | string){
return a + 1;
}
위 코드에서 if-else 조건문 없이 return a + 1만 있다면 타입 스크립트에서는 오류를 발생시킨다. 타입을 확실하게 지정해주어야 하기 때문이다.
이런 상황에서 typeof 연산자를 사용해서 타입을 좁혀주면 된다.
typeof
를 통해 알아낼 수 있는 기본 연산자는 string, number, bigint, boolean, symbole, undefined, obejct, function 이다.
문자열로 반환되므로 비교할 때 typeof a === 'number'
와 같은 형태로 비교해야 한다.
참고로 null은 typeof 연산자 사용시 'object' 가 반환된다.
null 타입은 tyepof를 사용하면 안되고 == 나 === 로 비교해야 한다.
console.log(typeof null) // object
/* null타입은 typeof 대신 */
let a = null;
if(a === null){
//일치 연산자 사용
console.log(a); // null
}
if(a == null){
//비교 연산자 사용
console.log(a); // null
}
객체에 특정 속성이 있는지 확인할 때 in
을 사용하는 방법이라던가, 해당 클래스로 만든 인스턴스인지 확인하는 instanceof 도 네로잉 방법중 하나에 포함된다.
참고 자료
타입스크립트 Narrowing