이펙티브 타입스크립트(6)

남자김용준·2021년 11월 8일
0

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

타입스크립트는 타입을 추론할 때 단순히 값만 고려하는 게 아니라 값이 존재하는 곳의 문맥도 사용한다.

type Language = 'JavaScript' | 'TypeScript' | 'Python';

function setLanguage(language: Language) {/*...*/}

setLanguage('JavaScript'); // 정상

let language = 'JavaScript'
setLanguage(language);
// ~~~~ 'string' 형식의 인수는 'Language' 형식의 매개변수에 할당될 수 없다.

const language = 'JavaScript';
setLanguage(language) // 정상

튜플, 객체

function panTo(where :[number,number]){/*...*/}
panTo([10,20]) // 정상

const loc = [10,20];
panTo(loc) // error

function panTo(where : readonly [number,number]){/*...*/}
panTo([10,20]) // 정상

const loc = [10,20] as const;
panTo(loc) // 정상 

타입 추론에서 문맥이 어떻게 쓰이는지 주의해서 살펴봐야 한다.

변수를 뽑아서 별도로 선언했을 때 오류가 발생하면 타입 선언을 추가해줘야 한다.

변수가 정말로 상수라면 상수 단언(as const)을 사용해야 한다. 그러나 상수 단언을 사용하면 정의한 곳이 아니라 사용한 곳에서 오류가 발생할 수 있어 주의해야한다.

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

타입 흐름을 개선하고, 가독성을 높이고, 명시적인 타입 구문의 필요성을 줄이기 위해 직접 구현하기보다는 내장된 함수형 기법과 로대시 같은 유틸리티 라이브러리를 사용하는 게 좋다.

profile
frontend-react

0개의 댓글