[Effective TypeScript] 3장 25 타입 스크립트의 타입시스템

채동기·2023년 3월 3일
0

TypeScript

목록 보기
11/21

아이템 25) 비동기 코드에는 콜백 대신 async 함수 사용하기

  • 콜백보다는 프로미스를 사용하는 게 코드 작성과 타입 추론 면에서 유리합니다.
  • 가능하면 프로미스를 생성하기보다는 async와 await을 사용하는 것이 좋습니다. 간결하고 직관적인 코드를 작성할 수 있고 모든 종류의 오류를 제거할 수 있습니다.
  • 어떤 함수가 프로미스를 반환한다면 async로 선언하는 것이 좋습니다.

아이템 26) 타입 추론에 문맥이 어떻게 사용되는지 이해하기

  • 타입 추론에서 문맥이 어떻게 쓰이는지 주의해서 살펴봐야 합니다.
  • 변수를 뽑아서 별도로 선언했을 때 오류가 발생한다면 타입 선언을 추가해야 합니다.
  • 변수가 정말로 상수라면 상수 단언(as const)을 사용해야 합니다. 그러나 상수 단언을 사용하면 정의한 곳이 아니라 사용한 곳에서 오류가 발생하므로 주의해야합니다.

아이템 27) 함수형 기법과 라이브러리로 타입 흐름 유지하기

  • 타입 흐름을 개선하고, 가독성을 높이고, 명시적인 타입 구문의 필요성을 줄이기 위해 직접 구현하기보다는 내장된 함수형 기법과 로대시 같은 유틸리티 라이브러리를 사용하는 것이 좋습니다.
const csvData = "...";
const rawRows = csvData.split('\n');
const headers = rawRows[0].split(',');
import _ from 'lodash';

interface BasketballPlayer {
  name: string;
  team: string;
  salary: number;
}
declare const rosters: {[team: string]: BasketballPlayer[]};
const allPlayers = Object.values(rosters).flat();
// 타입은 BasketballPlayer[]

밑의 예시 타입은 모두 string[]으로 같다.

const namesA = allPlayers.map(player => player.name)  //string[]
const namesB = _.map(allPlayers, player => player.name)  //string[]
const namesC = _.map(allPlayers, 'name');  //string[]

다음처럼 사용할 수도 있습니다.

const salaries = _.map(allPlayers, 'salary');  // 타입은 number[]
const teams = _.map(allPlayers, 'team');  // 타입은 string[]
const mix = _.map(allPlayers, Math.random() < 0.5 ? 'name' : 'salary');
  // 타입은 (string | number)[]

출처

<이펙티브 타입스크립트> (댄 밴더캅 지음, 장원호 옮김, 인사이트, 2021)

profile
what doesn't kill you makes you stronger

0개의 댓글