예를들어 함수에 타입을 지정했다고 가정해보자
function 함수(x:number | string){
return x+1;
}
이러면 에러가 뜬다.
Operator '+' cannot be applied to types 'string | number' and 'number'
이유는 union type에는 일반적으로 조작을 못하게 막아놔서 그렇다.
그래서 타입을 확정짓기 위해서 쓰는 것이
Narrowing 과 Assertion 이다.
if 문으로 타입을 하나로 확정짓는 기능이다.
function 함수(x:number | string){
if(typeof x ==='number'{
return x+1
}
else if (typeof x ==='string'{
return x+1
}
else{
return 0
}
}
이렇게 if문으로 "~~일때 ~~해주세요" 라고 해주어야 한다.
assert는 "이 변수의 타입을 ~~로 생각해주세요"
라고 해주는 것이다.
function 함수(x:number | string) {
return (x as number) +1
}
console.log(함수(123))
이렇게 as 를 써주면
"나는 이 변수를 number로 생각하기로 했어요" 가 된다.
as 키워드는 union type 같은 복잡한 타입을 하나의 정확한 타입으로 줄이는 역할
타입실드 임시 해제용. 실제 실행결과는 as 있을 때나 없을 때나 거의 동일하다.
assertion 을 쓰면 간편하지만, 정확하게 코딩을 하기 위해서는 narrowing을 쓰는 것이 좋다.