타입이 아직 하나로 확정되지 않았을 경우 사용하는 방법
function func(x:number | string){
return x+1
}
func(123)
위의 경우 다음과 같은 에러가 발생한다.
이 에러를 없애기 위해서 Narrowing을 써보면??
function func(x: number | string) {
if (typeof x === "string") {
return x + "1";
} else {
return x + 1;
}
}
func(123);
typeof라는 연산자를 사용하여 타입을 지정해주면 된다.
typeof x === string (X)
typeof x === "string" (O)
else, else if 안쓰면 에러가 날 수도 있다.
Narrowing으로 판별해주는 문법들 있다.
typeof 변수
속성명 in 오브젝트자료
인스턴스 instanceof 부모
타입을 덮어쓰는 방법이다.
function func(x: number|string){
let array : number[] = [];
array[0] = x as number
}
func(123)
as라는 키워드로 타입을 덮어 쓸 수 있다.
이렇게 하면 if문 안쓰고 개꿀이겠네??
하지만 이러면 혼난다고 한다?
애초에 Assertion의 경우는 여러 개의 타입을 하나로 확정할 때 쓰는 것이다.
즉
let 이름 : string = "kim"
이름 as number
이렇게 사용하면 안된다.
Assertion의 목적은 타입을 확정하는 것이지 타입을 변경하는 것이 아니다.
function func(x: number | string) {
let array: number[] = [];
array[0] = x as number;
}
func("123");
위의 예제와 같이 문자 123이 들어와도 에러를 캐치해주지 않는다.
따라서 x에 들어오는 값의 타입이 무엇인지 확실 할 때 사용해 주도록 한다.
그래서 굳이 Assertion을 사용하지 않는다.
디버깅용으로 사용하거나 긴급할 때 사용하는 문법이다.