typescript 타입 확정하려면? Narrowing, Assertion

jangdu·2023년 3월 23일
0

typescript

목록 보기
11/16

타입확정을 하려면?

일단 바로 함수를 예를들어서 알아보자

function sum(x :number | string){
   return x + 1  //err
}

이런 함수에서는 union으로 타입이 확실하지 않아서 연산이 안되는데
이럴 때는 타입을 확정해야만 한다.

Type Narrowing

if문 같은거로 타입을 하나로 지정하는 건데
위에 함수로 해보면

function sum(x :number | string){
  if (typeof x === 'number') {
    return x + 1
  } 
  else if (typeof x === 'string') {
    return x + 1
  }
  else {
    return 0
  }
}

if문에서 typeof키워드로 타입을 검사해서 각 타입을 확실하게 한 다음 각 연산을 따로해야한다.
ts에서는 귀찮더라고 이렇게 해야한다.

마지막에 else가 없으면 에러가 나는데
리턴하지 않는 조건문이 있으면 나중에 버그가 생길 수 있어서 에러를 준다.
typeof말고도 in이나 instanceof키워드 같은거로 사용해도 된다. 확정할 수 있으면 그건 Narrowing역할을 하는 것이다.

Type Assertion

타입을 간편하게 assert할 수 있다.
변수명 as string이런식으로 사용하면 된다.
또 맨위 친구를 써보면

function sum(x :number | string){
   return (x as number) + 1  //err
}

여기서 as를 사용하면
이변수는 number이라고 확실하게 정하는건데
ts의 컴파일러에게 주장한다고 보면된다.
함수에 무조건 숫자가 들어온다는 것이 확실해야 쓸 수 있는 문법이다.

  1. as는 union type 같은 복잡한 타입을 정확한 하나의 타입으로 줄이는 역할이다.
  2. 실제 코드 실행결과는 as가 있거나 없거나 똑같다.
  • 절대 실제 타입을 바꿔주는게 아니고 걍 이런타입 들간다잉 이라고 말해주는거임

왜 타입에런지 모를때 임시로 에러해결로 사용하거나,
내가 어떤 타입이 들어올지 확실히 알고 있는데 컴파일러 에러가 방해할때
이럴때만 사용하자.

profile
대충적음 전부 나만 볼래

0개의 댓글