TypeScript 타입 확정하기 Narrowing & Assertion

sh.inv·2023년 1월 26일
0

TypeScript

목록 보기
1/1
post-thumbnail
function 함수(x: number | string){
  return x + 1; //에러
}

위와 같은 코드는 매개변수가 number 또는 string 인 유니온타입이기 때문에 return은 에러가 난다. (타입이 하나로 확정되지 않았기 때문)

함수에서 타입이 하나로 확정되지 않았을 경우(유니온 타입) Type Narrowing을 사용해 타입을 확정지어야 된다.



Narrowing 사용 방법


  1. if 문과 typeof를 사용한다.
function 함수(x: number | string){
  if (typeof x === 'number'){
    return x + 1;
  } else {
	...
  }
}
// 주의할 점: if문 썼으면 끝까지 써야 안전하다. else, else if를 안쓰면 에러가 날 수 있다.

  1. assertion 문법 (권장하지 않음)
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로 덮어쓰기하면 오류가 나지 않는다.
  • assertion 문법의 용도
    • 여러개의 복잡한 유니온 타입을 하나로 확정지을 때 사용하고, 이미 확정지어진 타입에는 사용 할 수 없다. (타입을 a에서 b로 변경 불가)
    • 어떤 타입이 들어올지 100% 확실할 때 사용한다.
function 함수(x: number | string){
  let arr: number[] = [];
  arr[0] = x as number; // as number는 왼쪽에 있는 변수를 number로 덮어써달라는 문법
}

함수('123');
}
// x 뒤에 as number를 사용해 x의 타입을 number로 덮어쓰기하면 오류가 나지 않는다.

매개변수의 타입을 number로 선언해줬지만 함수('123')으로 string을 보내줘도 오류를 잡아내지 못한다.

profile
배움, 성장

0개의 댓글