Basics

1개의 게시글

TypeScript

[TypeScript] 타입 추론 (Type Inference)

November 27, 2025

타입스크립트를 사용하다 보면 모든 변수에 일일이 타입을 정의하지 않아도 코드가 잘 동작하는 것을 볼 수 있다. 이는 타입스크립트가 변수의 타입을 자동으로 파악하는 "타입 추론(Type Inference)" 기능을 제공하기 때문이다. 이번 포스팅에서는 타입스크립트가 언제, 어떻게 타입을 추론하는지, 그리고 주의해야 할 점은 무엇인지 정리해 본다. 1. 타입 추론이 가능한 상황들 일반적으로 변수를 선언하거나 초기화할 때, 타입스크립트는 할당된 값을 기준으로 타입을 추론한다. 1-1. 변수 선언 및 초기화 변수에 초기값을 할당하면 해당 값을 기준으로 타입이 추론된다. TypeScript let a = 10; // number 타입으로 추론 let b = "hello"; // string 타입으로 추론 let c = { id: 1, name: "조태민", profile: { nickname: "탬니", }, urls: ["https://taemni.dev"], }; // id, name, profile, urls 프로퍼티가 있는 객체 타입으로 추론 [cite: 207] 1-2. 구조 분해 할당 객체나 배열을 구조 분해 할당할 때도 타입 추론이 정상적으로 동작한다. TypeScript let { id, name, profile } = c; let [one, two, three] = [1, "hello", true]; 1-3. 함수의 반환값과 기본 매개변수 함수의 반환값은 return 문을 기준으로, 매개변수는 설정된 default value를 기준으로 추론된다. TypeScript // 반환값이 string으로 추론됨 function func() { return "hello"; } // message는 기본값 덕분에 string으로 추론됨 function func2(message = "hello") { return "hello"; } > 주의: 기본값이 없는 일반 매개변수는 자동으로 추론되지 않는다. 이 경우 암시적으로 any 타입이 되는데, strict 모드에서는 에러가 발생하므로 타입을 명시해줘야 한다 . > --- 2. 주의해야 할 상황들 (Gotchas) 타입 추론이 항상 단순하게 동작하는 것은 아니다. 상황에 따라 타입이 변하거나(진화), 예상보다 좁게 혹은 넓게 추론되기도 한다. 2-1. 암시적 any와 any의 진화 (Evolution of Any) 변수를 선언할 때 초기값을 생략하면, 해당 변수는 암시적으로 any 타입으로 추론된다. 재미있는 점은, 이후에 어떤 값을 할당하느냐에 따라 타입이 계속 변한다는 것이다. 이를 'any의 진화' 라고 부른다. TypeScript let d; // 암시적 any d = 10; // 이 라인부터 d는 number 타입 d.toFixed(); d = "hello"; // 이 라인부터 d는 string 타입 d.toUpperCase(); // d.toFixed(); // ❌ 오류 발생 (number 메서드 사용 불가) [cite: 241] 2-2. const 상수의 추론 (Literal Type) let으로 선언한 변수와 달리, const로 선언한 상수는 값이 변하지 않으므로 가장 좁은 타입(Literal Type) 으로 추론된다. TypeScript const num = 10; // number가 아니라 '10' (Number Literal) 타입으로 추론 const str = "hello"; // string이 아니라 '"hello"' (String Literal) 타입으로 추론 2-3. 최적 공통 타입 (Best Common Type) 배열에 다양한 타입의 요소를 넣으면, 타입스크립트는 해당 요소들을 모두 포괄할 수 있는 최적의 공통 타입(Union Type) 을 추론한다. TypeScript let arr = [1, "string"]; // (string | number)[] 타입으로 추론 [cite: 259] --- 3. 요약: 타입 추론 메커니즘 시각화 위에서 살펴본 let과 const, 그리고 any의 진화 과정을 시각적으로 정리하면 다음과 같다. ![Diagram Nov 27 2025.png](https://akodhrjerwyxttclrzkq.supabase.co/storage/v1/object/public/images/images/1764228430681-bsp7e0zx0ft.png) 핵심 요약 1. 일반 변수: 초기값을 기준으로 타입 추론 (let은 범용 타입, const는 리터럴 타입). 2. 구조 분해 & 함수: 매개변수 기본값이나 리턴값을 통해서도 추론 가능. 3. Any의 진화: 초기값 없는 변수는 할당되는 값에 따라 타입이 계속 변하는 독특한 특징을 가진다. 4. 최적 공통 타입: 여러 타입이 섞이면 Union 타입으로 추론된다.

TypeScriptStudyTypeInferenceBasics