TIL/TypeScript

[TypeScript] 이펙티브 타입스크립트 item 24~27

JoJobum 2022. 8. 1.

item 24

일관성 있는 네이밍 

const test = [10,20]
const test2 =test

test2[0] = 1 // test = [1,10] 이 된다

별칭의 남발은 제어 흐름 분석을 어렵게 만듬

별칭은 타입스크립트가 타입을 좁히는 것을 방해함

function isPointInPolygon(polygon: Polygon, pt: Coordinate) {
  const box = polygon.bbox; // 타입이 BoundingBox | undefined
  if(polygon.bbox){
    polygon.bbox // 타입이 BoundingBOx
    box // 타입이 BoundingBox | undefined
  }
}

 

비구조화 문법(동일한 키 값 사용하여 자동으로 할당)을 사용하여 일관된 이름 사용하는 것이 좋음

interface Coordinate{
	x:number;
	y:number;
}

interface BoundingBox{
	x: [number, number];
	y: [number, number];
}

interface Polygon{
	bbox?: BoundingBox;
}

function isPointInPolygon(polygon: Polygon, pt:Coordinate){
  const {bbox} = polygon; // 객체의 속성명과 동일한 변수명 사용하여 비구조화 문법 적용
  if(bbox){
    const {x,y} = bbox; // 객체의 속성명과 동일한 변수명 사용하여 비구조화 문법 적용
    if(pt.x < x[0] || pt.x > x[1] ||
       pt.y < y[0] || pt.y > y[1]}{
      return false;
    }
  }
}

 

item 25

비동기 코드에는 콜백 대신 async 함수 사용하기

 

callback, promise, async 이야기

JS 비동기 처리 — Registro (tistory.com)

 

JS 비동기 처리

Js 언어상의 특징으로 싱글 쓰레드를 사용 => 한번에 한가지 일만 처리 가능 이러한 점에 대한 단점들을 보완하기 위해 언어 자체는 병렬 처리를 못하지만, Js를 읽고 실행하는 엔진에서 병렬처리

lackofwillpower.tistory.com

 

 

콜백 대신 왜 프로미스/async 이냐? =>

콜백보다 프로미스가 코드 작성, 타입 추론 쉬움

 

프로미스 대신 왜 async 이냐? =>

일반적으로 더 간결하고 직관적인 코드가 됨,

async는 항상 프로미스를 반환하도록 강제됨,

콜백이나 프로미스 사용시 실수로 비동기, 동기가 혼용하여 사용할 수 있음 (혼용하면 안됨), 반면 async는 항상 비동기 코드 작성하게 함

 

 

item 26

 

타입 추론을 할때 값만이 아니라 문맥을 고려한다

값과 문맥을 분리하면 에러발생할 수 있음

이 때 타입 선언 혹은 상수 단언(as const)를 활용해서 해결한다.

 

 

item 27

 

왠만하면 직접 구현하기보다는 함수형 기법과 라이브러리로 타입 흐름 유지하기

=> 가독성 높아지고, 명시적인 타입구문의 필요성을 줄일 수 있음

반응형

댓글