ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TS] any, unknown 차이
    카테고리 없음 2024. 6. 14. 12:03

    타입스크립트를 처음 공부할 때 any로 무작정 타입을 지정한 기억 있다.

    그렇기 때문에 any는 나에게 친숙한데 unknown과 never는 무엇일까?

     

    any

    any부터 알아보자면 any 말 그대로 어떤 타입이든 지정할 수 있다.

     

    타입을 엄격하게 검사하는 타입스크립트에서 any 타입은 치명적인 존재이다.

     

    let num: number = 10;
    
    console.log(num.length)

     

    위 코드는 문제가 발생한다.

     

    number 타입은 length 프로퍼티가 존재하지 않기 때문이다.

     

    그럼 개발자 입장에서는 위 에러를 보고 사전에 예외처리를 하여 문제를 방지할 수 있을 것이다.

     

    하지만 any를 사용한다면?

     

    문제가 발생하지 않는다.

    let num: any = 10;
    
    console.log(typeof num); // number
    console.log(num.length); // undefined

     

    변수 numdms typeof 연산자를 사용해 확인해 보면, number 타입이 출력된다.

     

    number 타입은 length라는 프로퍼티가 존재하지 않지만 any로 정의되어 있어 undefined가 출력된다.

     

    타입스크립트는 any 타입에 대해 엄격하게 검사 또는 체크하지 않기 때문에 개발자 입장엣허는 문제가 없는 코드라고

    판단할 수도 있다. 하지만 애플리케이션을 개발하다가 any타입 때문에 오류가 일어나는 경우가 많다.

     

    unknown

    타입스크립트 3.0에서 도입된 타입이다.

     

    unknown 타입을 말 그대로 해석하면 모르는 타입이라고 말할 수 있다.

     

    unknown 타입은 any 타입과 동일하게 모든 값에 지정할 수 있지만, 할당된 값이 어떤 타입인지 모르기 때문에 함부로 프로퍼티나

    연산을 할 수없다.

    let molu: unknown = 0;
    
    console.log(molu.length)

     

    위 코드를 작성하면, 아래 사진처럼 문제가 발생한다.

     

    unknown 타입이라 에러가 발생했다고 뜬다.

     

    이를 해결하기 위해서는 조건문을 사용하여 타입 검사를 하는 경우는 문제없이 동작한다.

    let molu: unknown = 0;
    
    if (typeof molu === "number") {
      console.log(molu + 1);
    }

     

    하지만 타입검사를 number로 해놓고 length프로퍼티를 사용한다면 또 오류가 날 수 있다.

     

    마무리

    2개 타입을 알아보면서 더 많은 타입이 있다는 걸 알았다...

    그것도 다 공부해서 블로그로 작성해 봐야겠다!

Designed by Tistory.