[Effective TypeScript] 3장 19 - 21 타입 스크립트의 타입시스템

채동기·2023년 2월 25일
0

TypeScript

목록 보기
9/21

아이템 19) 추론 가능한 타입을 사용해 장황한 코드 방지하기

  • 타입스트립트가 타입을 추론할 수 있다면 타입 구문을 작성하지 않는 게 좋습니다.
  • 이상적인 경우 함수/메서드의 시그니처에는 타입 구문이 있지만, 함수 내의 지역 변수에는 타입 구문이 없습니다.
  • 추론될 수 있는 경우라도 객체 리터럴과 함수 반환에는 타입 명시를 고려해야 합니다. 이는 내부 구현의 오류가 사용자 코드 위치에 나타나는 것을 방지합니다.

반환 타입을 명시하는 이유에는 두가지가 있습니다.
첫째, 반환 타입을 명시하면 함수에 대해 더욱 명확하게 알 수 있기 때문입니다.
둘째, 명명된 타입을 사용하기 위해서입니다.

아이템 20) 다른 타입에는 다른 변수 사용하기

다른 타입에는 별도의 변수를 사용하는 게 바람직한 이유는 다음과 같습니다.
1. 서로 관련이 없는 두개의 값을 분리합니다.
2. 변수명을 구체적을 지을 수 있습니다.
3. 타입 추론을 향상시키며, 타입 구문이 불필요해집니다.
4. 타입이 좀 더 간결해집니다.
5. let 대신 const로 변수를 선언하게 됩니다. const로 변수를 선언하면 코드가 간결해지고, 타입 체커가 타입을 추론하기에도 좋습니다.

변수의 값은 바뀔 수 있지만 타입은 일반적을 바뀌지 않습니다.
혼란을 막기 위해 타입이 다른 값을 다룰 때에는 변수를 재사용하지 않도록 합니다.

아이템 21) 타입 넓히기

타입 넓히기(widening)란?
지정된 타일 값을 가지고 할당 가능한 값들의 집합을 유추하는 것을 의미합니다.

타입스크립트가 아무리 영리하다고 하더라도 사람의 마음을 읽을 수는 없습니다. 그렇기 때문에 추측한값이 항상 옳을 수는 없습니다.

그렇기 때문에 넓히기를 제어해야합니다.

const 사용하기

let 대신 const로 변수를 선언하면 더 좁은 타입이 됩니다.

let x = 'x'; // x 는 string
const x = 'x';  //  x는 "x"
let vec = {x: 10, y: 20, z: 30};
getComponent(vec, x); // let 사용시 에러 발생   

타입 스크립트의 기본 동작을 재정의

명시적 타입 구문을 제공

const v: {x: 1|3|5} = {
  x: 1,
}; 

타입 체커에 추가적인 문맥을 제공하

아이템 26 참고

const 단언문을 사용

const v1 = {
  x: 1,
  y: 2,
};  // { x: number; y: number; }

const v2 = {
  x: 1 as const,
  y: 2,
};  //  { x: 1; y: number; }

const v3 = {
  x: 1,
  y: 2,
} as const;  // { readonly x: 1; readonly y: 2; }

출처

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

profile
what doesn't kill you makes you stronger

0개의 댓글