타입 추론(type Inference) 이란?

타입 추론(type Inference)은 타입스크립트가 코드를 해석하여 타입을 정의하는 동작을 의미합니다.

변수를 초기화 하거나 함수의 파라미터에 기본값을 설정하거나 반환값을 설정했을 때 지정한 값을 적당한 타입을 제시하고 정의해주는 것을 의미합니다.

변수에서의 타입 추론

아래 코드에서 변수 a에 타입을 할당하지 않아도 해당 변수에 마우스를 올려보면 number type으로 타입이 정의되어 있는 것을 볼 수 있습니다. 타입스크립트는 할당한 초기값에 따라서 적절한 타입을 타입 추론하게 됩니다.

// 자동의 number 타입으로 타입이 정의됩니다.
let a = 10;
// 위 코드는 아래 코드와 동일합니다.
// let a:number = 10;

image (1).png

아래와 같이 변수를 선언하고 값을 할당하지 않을 경우에는 어떤 값이 들어올지 모르기 때문에 타입은 any 타입으로 정의됩니다.

// any 타입
let a;

image (2).png

함수에서 타입 추론

아래 코드와 같이 함수에서는 파라미터와 반환 값을 타입 추론할 수 있습니다.

함수의 반환 값은 파라미터의 타입과 내부 로직에 따라 자동으로 추론됩니다.

// 파라미터의 a 타입과 반환값 타입이 any로 타입 추론됩니다.
function something(a) {
	return a;
}

// 파라미터의 값의 기본 값을 10으로 주었을 때
// 값을 넘기지 않아도 되기 때문에 옵셔널 파라미터인
// ?가 붙으며 number 타입으로 반환 값은 number 타입으로 타입 추론이 됩니다.
function something(a = 10) {
	return a;
}

// 반환 타입이 number 타입으로 타입 추론
function sum(a:number, b:number) () {
  return a + b;
}

// 반환 타입이 boolean 타입으로 타입 추론
function sum(a:number, b:number) () {
  return a === b;
}

인터페이스와 제네릭에서 타입 추론