[TS] 타입 추론

TIL

타입스크립트는 모든 변수에 일일이 타입을 정의하지 않아도 되는 편리함을 제공한다.

그러나 모든 상황에서 타입을 잘 추론하는 것은 아니다.

이렇게 타입 추론이 불가능한 변수에는 암묵적으로 any타입이 추론되는데, 만약 엄격한 타입 검사 모드라면 이러한 암시적 any타입의 추론을 오류로 판단하게 된다.

타입 추론이 가능한 상황

상황 1: 변수 선언

일반적인 변수 선언의 경우 초기값을 기준으로 타입이 잘 추론된다.

let a = 10;
let b = "hello";
let c = {
  id: 1,
  name: "devmark",
  profile: {
    nickname: "고견",
  },
  urls: ["https://devmark.tistory.com/"],
};

 

상황 2: 구조 분해 할당

객체와 배열을 구조 분해 할당하는 상황에서도 잘 추론된다.

let c = {
  id: 1,
  name: "devmark",
  profile: {
    nickname: "고견",
  },
  urls: ["https://devmark.tistory.com/"],
};

let { id, name, profile } = c;

let [one, two, three] = [1, "hello", true];

 

상황 3: 함수의 반환값

함수 반환값의 타입은 return문을 기준으로 잘 추론된다.

function func() {
  return "hello";
}

 

상황 4: 기본값이 설정된 매개변수

기본값이 설정된 매개변수의 타입은 기본값을 기준으로 추론된다.

function func(message = "hello") {
  return "hello";
}

 

주의해야 할 상황

상황 1: 암시적인 any 타입 추론

변수를 선언할 때 초기값을 설정하지 않으면 암시적으로 any타입으로 추론된다.

이후 이 변수에 값을 할당하면, 그때부터 타입이 해당 값의 타입으로 진화(evolve)한다.

그러나 이는 타입 안정성을 해치므로, 가능한 한 초기값과 함께 선언하거나 명시적으로 타입을 지정하는 것이 좋다.

 

상황 2: const 상수의 추론

const로 선언된 상수도 타입 추론이 진행된다. 그러나 let으로 선언한 변수와는 다른 방식으로 추론된다.

const는 재할당이 불가능하므로, 타입스크립트는 더 구체적인 리터럴 타입으로 추론한다. 이는 타입 안정성을 높이는 데 도움이 된다.

 

최적 공통 타입 (Best Common Type)

여러 타입의 값이 섞인 배열의 경우, 타입스크립트는 최적 공통 타입을 추론한다.

배열 내의 모든 요소 타입을 포함할 수 있는 유니온 타입으로 추론된다.

 

참고: 타입 추론이 모호하거나 의도와 다르게 추론되는 경우, 명시적으로 타입을 지정하는 것이 더 안전하다.

'TIL' 카테고리의 다른 글

구조 분해 할당  (0) 2025.10.31
[TS] 타입 추론 및 타입 정의 연습  (0) 2025.10.31
[TS] 대수 타입  (0) 2025.10.31
[TS] void와 never  (0) 2025.10.28
[TS] any와 unknown  (0) 2025.10.28
'TIL' 카테고리의 다른 글
  • 구조 분해 할당
  • [TS] 타입 추론 및 타입 정의 연습
  • [TS] 대수 타입
  • [TS] void와 never
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    C
    Next.js
    페이지 라우터
    ai 감성 일기장
    typescript
    트러블 슈팅
    Pages Router
    CS
    javascript
    제네릭
    바닐라 자바스크립트
    emotion diary
    Trouble Shooting
    문자열
    algorithm
    generic
    알고리즘
    클래스
    useState
    함수 타입
    memory
    타입 좁히기
    App Router
    자료구조
    앱 라우터
    인터페이스
    react
    cs50
    Spa
    배열
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
[TS] 타입 추론
상단으로

티스토리툴바