기본적인 개념과 사용법을 익혀보자. Narrowing은 if문 등으로 타입을 하나로 정해주는 것을 뜻한다.
function 내함수(x :number | string){
return x + 1 //에러남
}
string | number 같은 union type 에는 일반적으로 조작을 못하게 막아놔서 에러가 나는데,
이런 메세지를 보면 1. 타입을 하나로 Narrowing 해주거나 2. Assert 해주거나 둘 중 하나 해주면 된다.
먼저 Narrowing을 적용해보자
function 내함수(x :number | string){
if (typeof x === 'number') {
return x + 1
}
else if (typeof x === 'string') {
return x + 1
}
else {
return 0
}
}
if문과 typeof 키워드로 현재 파라미터의 타입을 검사해서 무엇이 실행되어야 하는지 정해주면 된다.
typescript는 타입이 애매하면 안되기 때문에 그것을 막기 위한 장치라고 보면 된다.
꼭 typeof를 쓸 필요는 없고 in, instanceof, 논리연산자 등 타입을 하나로 확정지을 수 있는 어떤 것도 Narrowing 역할을 할 수 있는데,
Narrowing에 사용하는 것들을 따로 정리해보려고 하는데, 많이 길지 않으면 그냥 여기에 추가를 해야겠다.
as를 이용하여 타입을 덮어쓰는 방법이다.
function 내함수(x :number | string){
return (x as number) + 1
}
console.log( 내함수(123) )
변수명 as number 라고 쓰면, 변수를 number로 타입을 변경해준다.
아무때나 사용하면 안되고, 무슨 타입이 들어올지 확실할 때에만 assertion 사용해야 한다. 주로 에러 디버깅 할 때 잠깐 사용하자