• dmchoi
  • [TypeScript] Type Narrowing, Assertion

    2021년 09월 14일

    Type Narrowing

    타입이 아직 하나로 확정되지 않았을 경우 type narrowing을 써야합니다.
    이전 포스팅에서 본 Union type 때문에 어떤 변수의 타입이 아직 확실하지 않으면 if문과 같은 조건문으로 narrowing 해줘야 데이터 조작이 가능해 집니다.

    이는 가끔 타입이 확실하지 않을 때 생기는 부작용을 막아줍니다.

    function foo(x: number | string) {
      // if문을 사용해서 타입을 narrowing 해줌
      if (typeof x === "number") {
        return x * 2;
      } else if (typeof x === "string") {
        return x + x;
      } else {
        return 0;
      }
    }

    참고로 if문 사용시 else도 꼭 같이 써줘야합니다. return 하지 않는 조건문이 있다면 나중에 버그가 생길 수 있어서 에러를 발생할 수도 있습니다.

    Type Assertion (타입 표명)

    타입을 간편하게 assert 할 수도 있습니다.

    “이 변수의 타입을 string으로 생각해주세요”

    변수명 as string 이런 식으로 as라는 키워드 사용하면 됩니다.

    function foo(x: number | string) {
      return (x as number) + 1;
    }
    
    console.log(foo(1));
    
    // 함수 안에 들어올 변수가 숫자임을 알고 있어야 안전하게 사용 가능

    as 키워드는 Union type과 같은 복잡한 타입을 하나의 정확한 타입으로 줄이는 역할을 합니다.

    (number 타입을 as string 이렇게 바꾸는건 안됨 )

    as는 언제 사용해야하나요?

    1.왜 타입 에러가 나는지 정말 모르겠는 상황에 임시로 에러 해결용으로 사용합니다.

    2.내가 어떤 타입이 들어올지 정말 확실하게 알고는 있는데 컴파일러 에러가 방해할 때 사용합니다.

    Tags
      © 2021 dmchoi, Powered By Gatsby.