Typescript - Narrowing, Assertion 으로 타입 확정하기

김형석·2022년 6월 19일
0

typescript

목록 보기
2/2

Type Narrowing

기본적인 개념과 사용법을 익혀보자. 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에 사용하는 것들을 따로 정리해보려고 하는데, 많이 길지 않으면 그냥 여기에 추가를 해야겠다.

Type Assertion

as를 이용하여 타입을 덮어쓰는 방법이다.

function 내함수(x :number | string){ 
    return (x as number) + 1 
}
console.log( 내함수(123) )

변수명 as number 라고 쓰면, 변수를 number로 타입을 변경해준다.

as 키워드 사용시 특징

  1. as 키워드는 union type 같은 복잡한 타입을 하나의 정확한 타입으로 줄이능 역할을 수행(number 타입을 as string으로 바꾸려고 하면 에러)
  2. 실제 코드 실행결과는 as 있을 때나 없을 때나 거의 동일함

아무때나 사용하면 안되고, 무슨 타입이 들어올지 확실할 때에만 assertion 사용해야 한다. 주로 에러 디버깅 할 때 잠깐 사용하자

profile
블로그 이사 : https://hengxi.tistory.com

0개의 댓글