function 함수(x: number | string){
return x + 1; //에러
}
위와 같은 코드는 매개변수가 number 또는 string 인 유니온타입이기 때문에 return은 에러가 난다. (타입이 하나로 확정되지 않았기 때문)
함수에서 타입이 하나로 확정되지 않았을 경우(유니온 타입) Type Narrowing을 사용해 타입을 확정지어야 된다.
function 함수(x: number | string){
if (typeof x === 'number'){
return x + 1;
} else {
...
}
}
// 주의할 점: if문 썼으면 끝까지 써야 안전하다. else, else if를 안쓰면 에러가 날 수 있다.
function 함수(x: number | string){
let arr: number[] = [];
arr[0] = x;
}
// arr은 number만 들어갈 수 있는 배열인데 x가 타입 확정이 되지 않아서 오류발생
function 함수(x: number | string){
let arr: number[] = [];
arr[0] = x as number; // as number는 왼쪽에 있는 변수를 number로 덮어써달라는 문법
}
// x 뒤에 as number를 사용해 x의 타입을 number로 덮어쓰기하면 오류가 나지 않는다.
function 함수(x: number | string){
let arr: number[] = [];
arr[0] = x as number; // as number는 왼쪽에 있는 변수를 number로 덮어써달라는 문법
}
함수('123');
}
// x 뒤에 as number를 사용해 x의 타입을 number로 덮어쓰기하면 오류가 나지 않는다.
매개변수의 타입을 number로 선언해줬지만 함수('123')으로 string을 보내줘도 오류를 잡아내지 못한다.