본문으로 건너뛰기

아이템19

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

  • 타입스크립트의 많은 타입 구문은 사실 불필요하다. 다음과 같이 코드의 모든 변수에 타입을 선언하는 것은 비생산적이며 형편없는 스타일로 여겨진다.
// 비생산적인 코드
let x: number = 12;
// 개선한 코드
let x = 12;
  • 타입이 추론되면 리펙터링 역시 용이해진다.
// 비구조화 할당문
function logProduct(product: Product) {
const { id, name, price } = product;
}
// 비구조화 할당문 + 명시적 타입 구문
function logProduct(product: Product) {
const { id, name, price }: { id: string; name: string; price: number} = product;
}
  • 정보가 부족해서 타입 판단이 어려울떄가 명시적 타입 구문이 필요할 때 이다.

  • 이상적인 타입스크립트 코드는 함수/메서드 시그니처에 타입 구문을 포함하지만, 함수 내에서 생성된 지역 변수에는 타입 구문을 넣지 않는다.

  • 보통 타입 정보가 있는 라이브러리에서, 콜백 함수의 매개변수 타입은 자동으로 추론된다.

// 이렇게 하면 안된다!
app.get('/health', (request: express.Request, response: express.Response) => {
response.send('OK');
});

// 이렇게 사용하기!
app.get('/health', (request, response) => {
response.send('OK');
});

객체 리터럴을 정의 할 때

  • 객체 리터럴의 정의에 타입을 명시하면, 잉여 속성 체크가 동작 함수의 반환에도 타입을 명시하여 오류를 방지
  • 타입 추론이 가능할지라도 구현상의 오류가 함수를 호출한 곳까지 영향을 미치지 않도록 하기 위해 타입 구문을 명시하는 것이 좋음
  • 반환 타입을 명시하면, 구현상의 오류가 사용자 코드의 오류로 표시되지 않는다.