[Effective Typescript] 타입 추론(1)

이예슬·2022년 11월 15일
0

Effective TypeScript

목록 보기
7/15

Item19. 추론 가능한 타입을 사용해 장황한 코드 방지하기

타입스크립트는 타입 추론을 적극적으로 수행한다. 타입 추론이 된다면 명시적 타입 구문은 필요하지 않으므로 사실 타입스크립트의 많은 타입 구문은 불필요한 경우가 많다. 타입은 복잡한 객체도 추론할 수 있으므로 객체를 선언할 때도 타입을 생략하고 작성해도 된다.

타입스크립트는 때론 우리가 직접 작성한 타입보다 정확하게 타입을 추론한다.

const foo : string = 'foo'
const bar = 'bar' // type is 'bar'

위 코드의 경우에도 우리가 직접 작성한 string값보다 타입스크립트가 추론한 ‘bar’라는 값이 더 정확한 추론이다.

타입이 추론 될 경우 리팩토링 역시 더 용이해진다. interface를 따로 선언할 경우 해당 변수의 값과 interface의 타입을 모두 변경해야 하므로 값만을 변경했을 경우 type error가 발생할 수 있다.

즉 정보가 부족해서 타입스크립트가 스스로 타입을 판단하기 어려운 상황을 제외하고는 타입을 명시적으로 선언하는 것은 불필요하다.

정확한 타입 추론에도 불구하고 타입을 명시하고 싶은 경우도 있다.

  1. 객체 리터럴을 정의할 때

    → 타입을 명시할 경우 잉여 속성 체크가 동작하므로 타입을 명시할 경우 할당하는 시점에 요류를 알 수 있다.

  2. 함수의 반환값

    → 구현상의 오류가 함수를 호출한 곳까지 영향을 미치지 않도록 하기 위해 타입 구문을 명시하는 게 좋다.

    → 추후에 코드가 변경되어도 함수의 시그니처가 쉽게 바뀌지 않아 함수에 대해 더 명확하게 알 수 있다.

    → 명명된 타입을 사용할 수 있다.

💡 eslint 규칙 중 `no-inferrable-types` 를 사용하면 작성된 모든 타입 구문이 정말로 필요한지 확인할 수 있다.

Item20. 다른 타입에는 다른 변수 사용하기

자바스크립트에서는 한 변수를 다른 목적을 가지는 다른 타입으로 재사용해도 되지만 타입스크립트에서는 그럴 경우 에러가 발생한다.

한 변수에서 다른 두 가지 타입을 사용하고 싶을 경우 union을 활용하여 확장할수도 있지만 서로 관련없는 코드를 단순히 재사용하는 것이라면 별도의 변수를 도입하는 것이 더 좋다.

다른 타입에 별도의 변수를 사용하는 것이 더 좋은 아유는 다음과 같다.

  • 서로 관련이 없는 두 개의 값을 분리한다.
  • 변수명을 더 구체적으로 지을 수 있다.
  • 타입 추론을 향상시키며, 타입 구문이 불필요해진다.
  • 다입이 좀 더 간결해진다.
  • let 대신 const로 변수를 선언하여 코드가 간결해지고 타입 체커가 타입을 추론하기도 좋다.

위와 같은 이유로 타입이 바뀌는 변수는 되도록 피해야 하며 목적이 다른 곳에는 별도의 변수명을 사용해야 혼란을 방지할 수 있다.


<이펙티브 타입스크립트> Dan Vanderkam, 프로그래밍 인사이트 (2021)

profile
꾸준히 열심히!

0개의 댓글