이펙티브 타입스크립트 - 5. 추론 가능한 타입을 사용해 장황한 코드 방지하기

학술계로 분류되는 ML과 하스켈 같은 언어는 오래전부터 정교한 타입 추론 시스템을 가지고 있었다. 학술계 언어의 발전에 대응하여 10년전부터는 기존 산업계에의 언어에도 타입 추론 기능이 추가되기 시작했다. C++는 auto를 추가했고, 자바는 var를 추가했다. 타입 추론은 수동으로 명시해야 하는 타입 구문의 수를 엄청나게 줄여 주기 대문에, 코드의 전체적인 안정성이 향상된다.

타입스크립트 초보자와 숙련자는 타입 구문의 수에서 차이가 난다. 불필요한 타입 구문을 지양하고, 타입스크립트가 어떻게 타입을 추론하는지, 언제 타입 선언을 작성해야 하는지, 타입 추론이 가능하더라도 명시적으로 타입 선언이 필요한 상황을 이해하자.

타입 스크립트가 타입을 추론할 수 있다면 타입 구문을 작성하지 않는게 좋다

타입스크립트가 결국 타입을 위한 언어이기 때문에, 변수를 선언할 때마다 타입을 명시해야 한다고 생각한다. 그러나 타입스크립트의 많은 타입 구문은 사실 불필요하다.
선언한 변수에 타입을 명시하지 않아도 마우스를 올려보면 말풍선을 통해 타입이 추론됨을 알 수 있다. 이렇듯 타입이 추론되면 명시적 타입 구문은 필요치 않다.

함수/메서드 시그니처에는 타입 구문이 있지만, 함수 내 지역 변수에는 타입 구문이 없다

비구조화 할당문은 모든 지역 변수의 타입이 추론되도록 한다

interface Param {
  id: string,
  name: string,
  price: number,
}

function logParam(param: Param) {
  const {id, name, price} = product; // 불필요한 타입을 명시하면 코드가 번잡해 지나 생략 가능하다.  
  console.log(id, name, price);
}

기본 값이 있는 경우 함수 매개변수에 타입을 생략할 수 있다

function parseNumber(str: string, base=10) { // 기본값 10이 있기 대문에 base는 number로 추론된다. 
  // ...
}

추론될 수 있는 경우라도 객체 리터럴과 함수 반환에는 타입 명시를 고려하자.

반환 타입을 명시해야하는 이유 4가지

  1. 함수 반환에도 타입을 명시하여 오류를 방지 할 수 있다
    • 타입 추론이 가능할지라도 구현상의 오류가 함수 호출처까지 영향을 미치지 않도록 하기 위해 타입 구문을 명시하는게 좋다. 반환 타입을 명시하면, 구현상의 오류가 사용자 코드의 오류로 표시되지 않는다.
  2. 반환 타입을 명시하면 함수에 대해 더욱 명확하게 알 수 있다.
  3. 명명된 타입을 사용하기 위함이다.
  4. 반환 타입을 명시하면 직관적인 표현이 되고, 반환 값을 별도의 타입으로 정의하면 타입에 대한 주석을 작성 할 수 있다.

출처: 이펙티브 타입스크립트



쿠팡 파트너스 활동을 통해 일정액의 커미션을 제공받을 수 있습니다.