본문 바로가기

TypeScript

타입 추론 (Inference)

추론 : 어떠한 판단을 근거로 삼아 다른 판단을 이끌어 냄

타입 추론이 무엇인지 간단한 코드와 함께 살펴보겠습니다.

let num = 12;
num = "hello"; // 타입 에러 발생


위의 코드는 변수 num에 숫자를 할당한 후 문자를 재할당하고 있습니다. 이때 변수 num 선언 시 타입 명시를 해주지 않았음에도 타입 오류가 발생하게 됩니다. 이는 TS에서 선언 시 숫자 데이터를 할당하고 있을 경우 숫자 타입이라고 추론을 하고 있기 때문입니다. 이러한 TS의 추론을 기준으로 해당 변수에 문자를 재할당하게 되면 타입에러가 발생하게 됩니다.

*타입을 명시하지 않아도 위의 예시와 같이 TS에서 타입 추론을 통해 타입을 명시해주기 때문에 매번 타입을 명시해줄 필요 없이 TS가 추론하지 못하는 범위에서 타입을 명시해주면 됩니다.


TS는 아래의 세 가지 기준을 통해 타입을 추론할 수 있습니다.

  • 초기화된 변수
  • 기본값이 설정된 매개 변수
  • 반환 값이 있는 함수

 

초기화된 변수

 

let num = 12;


변수 num을 선언하고 12의 숫자 데이터를 할당하고 있습니다. 이렇게 타입이 명확한 특정 데이터를 할당할 때 TS가 타입 추론을 하여 숫자 타입을 명시해주게 됩니다.

다른 예시도 살펴보겠습니다.

const items = ["item1","item2"]

for (const item of items) {
  console.log(item.toUpperCase());
}

 

상수 items에는 배열 안 요소가 "item1", "item2"인 배열이 초기값으로 할당되고 있습니다. 해당 배열도 타입이 명확한 배열 데이터가 할당되었기 때문에 TS는 상수 items의 타입을 string[]으로 추론하게 됩니다.

 

해당 예시 코드의 경우 for of문에서 상수 item에 문자열 메서드인 toUpperCase를 사용하고 있으며, 상수 item에 별도의 string 타입 명시를 하지 않았음에도 타입 에러가 발생하지 않고 있습니다.

 

이는 상수 items의 타입을 string[]으로 추론했기 때문에 상수 items의 요소는 string으로 타입 추론을 했기 때문입니다.

 

 

 

 

기본값이 설정된 매개 변수, 반환하는 값이 명확한 함수

 

function add(a: number, b = 2) {
  return a + b;
}


함수 add의 매개 변수 a는 number 타입으로 명시가 되어 있으며, b의 경우 기본값으로 2가 할당되고 있습니다. 매개 변수 b처럼 기본값을 타입이 명확한 특정 데이터를 할당해주게 되면 TS는 타입 추론을 통해 매개 변수에 타입을 추론하여 명시해주게 되고, 이로 인해 매개 변수 b는 숫자 타입의 기본값을 할당받고 있기 때문에 number 타입이 명시됩니다.

또한 함수의 경우 반환하는 값의 타입 또한 명시해주어야 하는데 위의 경우 매개 변수 a와 b가 number 타입이기 때문에 연산되어 반환하는 값 또한 number 이기 때문에 TS가 타입을 추론하여 명시해주게 됩니다.


이렇게 TS는 타입 추론을 하여 타입을 명시를 해주기 때문에 TS가 추론할 수 없는 범위에서 타입을 명시해주면 되고 이로 인해 코드에서 타입을 선언하는 부분의 내용이 최소화가 됩니다.

이때 TS를 사용하는 이유가 명시한 타입을 엄격하게 지키기 위해서 인데 타입 추론을 사용하여 타입 선언을 최소화하는 것이 타입을 엄격하게 지키는 개념과 반대라고 생각할 수 있습니다. 하지만 이는 TS에서 타입 추론을 통해 타입을 명시해주기 때문에 타입 명시를 따로 해줄 필요가 없다의 개념으로 접근해야 합니다.

'TypeScript' 카테고리의 다른 글

인터페이스 (Interface)  (2) 2023.01.02
타입 가드(Guard)  (0) 2023.01.02
타입 단언과 할당 단언  (0) 2023.01.02
TypeScript 타입 종류  (0) 2023.01.01
TypeScript 기본 정리  (0) 2023.01.01