Typescript API 설계: 단일 호출 가능 또는 다중 호출 가능

예를 들어 시작하겠습니다. 요구 사항이 '목적지'와 '교통'을 인수로 사용하는 '여행' API를 만드는 것이라고 가정해 보겠습니다.

커링은 하나의 함수를 여러 콜러블로 변환하는 과정인데 여기서는 매개변수의 개수에 따라 다른 함수를 반환하는 함수라고 합니다.

Typescript를 사용하여 어떤 패턴을 사용하여 API를 어떻게 설계하시겠습니까?

A. 일반 단순 기능

const travel = (destination, transportation) => {
  // do something
}



B. 카레 형태

const travel = (destination) => (transportation) => {
  // do something
}


C. 메소드 체이닝

const travel = (destination) => {
   return {
       transport: (transportation)=>{
             // do something
       }
   }
}


커링과 메소드 체이닝은 여러 콜러블을 포함하는 반면 일반 함수는 하나의 콜러블만 포함하기 때문에 비슷합니다.

나는 호출할 때 오류가 덜 발생하는 매우 간단한 이유로 단일 호출 가능을 선호합니다.

여기 당신이 그들을 부르는 방법이 있습니다. 우리는 Typescript를 사용하고 있음을 명심하십시오

A. 일반 기능

travel('North Pole', 'swimming') // ok
travel('North Pole') // ts error


B. 커링

travel('North Pole')('swimming') // ok
travel('North Pole')() // ts error
travel('North Pole') // ok, but do nothing, no ts error


C. 메소드 체이닝

travel('North Pole').transport('swimming') // ok
travel('North Pole').transport() // ts error
travel('North Pole') // ok, but do nothing, no ts error


보시다시피 Typescript로 일반 함수를 잘못 호출하는 것은 불가능합니다.

그러나 이것은 주의를 기울이지 않으면 부분적으로 호출할 수 있는 커링 및 메서드 체인과 동일하지 않습니다.

여전히 커링과 메소드 체이닝은 인수를 재사용하는 데 좋습니다.

const goToNorthPoleWith= travel('North Pole')
goToNorthPoleWith('Airplane')
goToNorthPoleWith('Ship')


따라서 두 세계의 장점을 모두 얻으려면 항상 단일 콜러블에서 시작해야 하며 인수를 재사용하려면 나중에 커리할 수 있습니다.

좋은 웹페이지 즐겨찾기