ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (TypeScript) - TypeScript 타입 추론
    개발/TypeScript 2025. 8. 20. 15:22
    반응형

    ■ 타입 추론

    타입스크립트는 타입을 적지 않아도 할당된 값을 보고 자동으로 타입을 추론한다.

     

    타입스크립트가 타입을 추론하는 기준은 변수의 초기값이다.

    타입 추론을 잘 하면 굳이 타입을 일일이 기재할 필요는 없다.

     

    let { id, name, profile } = c;
    
    let [one, two, three] = [1, 'hello', true];

     

     다음과 같이 객체와 배열의 구조분해 할당도 잘 추론한다.

     

     

    함수의 경우 return 문의 타입으로 반환값을 추론한다.

    다음 코드에서도 return 이 string 타입이여서 string 타입으로 추론한 것을 볼 수 있다. 

     

    함수의 매개변수로 전달되는 변수는 타입 추론이 어렵기 때문에 적어줘야 한다.

    그러나 매개변수에 기본값이 있을 경우 해당 매개변수 값도 추론이 가능하다.

     

    let d;
    d = 1;
    d.toFixed(); //가능
    d.toUpperCase(); //불가능

     

    초기화를 하지 않으면 처음에는 any 타입으로 암묵적으로 인식하고 이후에 지정된 처음 값으로 추론을 한다.

    그래서 d 는 number 로 type 추론이 되어서 toFixed() 는 가능하지만 toUpperCase()는 오류가 뜬다.

     

    let d;
    d = 1;
    d.toFixed();
    
    d = 'hello'
    d.toUpperCase();

     

    그런데 다음과 같이 다시 값을 할당해주면 그 값으로 타입이 바뀐다.

    즉, d 의 값이 다시 string 타입이 된 것이다. 

     

    신기한 것은 위에는 그대로 number 타입으로 추론이 되고, 밑에는 string 타입으로 추론이 된다.

     

    이렇게 초기값을 정하지 않으면 암묵적 any 타입이 되고,

    any 타입이 상황에 따라 바뀌게 되는 것을 any 타입의 진화라고 한다.

     

    하지만 이렇게 되면 해당 변수의 타입 파악이 어려울 수 있기 때문에 any 타입 추론은 추천하지 않는 방법이다.

     

     

    const 로 변수를 선언하면 number 타입이 아니라 number 리터럴 타입으로 인식한다.

    왜냐하면 const 선언한 이 num 변수는 어차피 상수이기 때문에 10 이외의 값 이외에 담을 일이 없기 때문이다.

     

    배열에서는 number 와 string 둘 다 들어가야 함으로 유니온 타입의 배열이 들어갔다.

     

    프로그래머가 범용적으로 변수를 사용할 수 있도록 조금 더 넓은 타입으로 추론을 해주는데, 이것을 타입 넓히기라고 한다.

    반응형
Designed by Tistory.