`pipe`d ES6 함수를위한 JSDoc 생성 방법


10

with 함수 구성을 사용하여 정의 된 ES6 스타일 함수가 asyncPipe있습니다.

import { getItemAsync } from 'expo-secure-store';

const asyncPipe = (...fns) => x => fns.reduce(async (y, f) => f(await y), x);

const getToken = () => getItemAsync('token');

const liftedGetToken = async ({ ...rest }) => ({
  token: await getToken(),
  ...rest,
});

const liftedFetch = ({ body, route, token, method = 'GET' } = {}) =>
  fetch(route, {
    ...(body && { body: JSON.stringify(body) }),
    headers: {
      'Content-Type': 'application/json',
      ...(token && { Authorization: `Bearer ${token}` }),
    },
    method,
  });

const json = res => res.json();

/**
 * @method
 * @param {Object} fetchSettings the settings for the fetch request
 * @param {Object} fetchSettings.body the body of the request
 * @param {string} fetchSettings.route the URL of the request
 * @param {string} fetchSettings.method the method of the request
 * @param {string} fetchSettings.token should only be used for testing and unauthenticated requests
 */
const request = asyncPipe(liftedGetToken, liftedFetch, json);

보시다시피 JSDoc 설명을 추가하려고했습니다. 그러나 어디서나 사용할 수있는 편집기 VSCode는 매개 변수를 제안하지 않습니다. JSDoc으로 이러한 종류의 함수를 어떻게 선언합니까? 그리고이 기능이 Intellisense에서 작동하도록 매개 변수를 얻는 방법은 무엇입니까?


답변:


1

VSCode는 후드 아래에서 TypeScript 엔진을 사용합니다.이 기능은 함수 컴포지션에서 유형을 유추하는 데 좋지 않으며 앞에서 본 것처럼 포인트 프리 컴포지션을 함수 선언으로 인식하지 않습니다.

타입 힌트를 원한다면, 그 주위에 뾰족한 함수를 감싸서 구성된 함수에 인수를 지정할 수 있습니다.

다음과 같이 작성합니다. 참고 : 기본값을 사용하면 JSDoc이 유형 힌트에 필요하지 않지만 설명을 위해 JSDoc을 유지해야 할 수도 있습니다. 또한 기본 폴백으로 인한 오류가 적절한 오류 메시지를 생성하는지 확인하십시오.

/**
  * http request with JSON parsing and token management.
  * @param {Object} fetchSettings the settings for the fetch request
  * @param {Object} fetchSettings.body the body of the request
  * @param {string} fetchSettings.route the URL of the request
  * @param {string} fetchSettings.method the method of the request
  * @param {string} fetchSettings.token should only be used for testing and unauthenticated requests
  */
const request = ({
  body = {},
  route = '',
  method = 'GET',
  token = ''
}) => asyncPipe(liftedGetToken, liftedFetch, json)({
  body, route, method, token
});

6

VSCode는에 익명 함수의 주석을 표시하려고 시도합니다 asyncPipe. JSDoc 주석을 그 안에 추가하면 다음과 같은 동작을 볼 수 있습니다.

const asyncPipe = (...fns) =>
  /**
   * My asyncPipe description
   * @param {Object} x Any object
   */
  x => fns.reduce(async (y, f) => f(await y), x);

const request = asyncPipe(liftedGetToken, liftedFetch, json);

예

불행히도 JSDoc에는 익명 함수의 문서를 무시하려는 방법이 없습니다. 그러나 다음과 같이 VSCode에 대한 의도를 강요 할 수 있습니다.이 경우 추가 함수 호출이 발생합니다.

const doRequest = asyncPipe(liftedGetToken, liftedFetch, json);

/**
 * @method
 * @param {Object} fetchSettings the settings for the fetch request
 * @param {Object} fetchSettings.body the body of the request
 * @param {string} fetchSettings.route the URL of the request
 * @param {string} fetchSettings.method the method of the request
 * @param {string} fetchSettings.token should only be used for testing and unauthenticated requests
 */
const request = fetchSettings => doRequest(fetchSettings);

솔루션 예

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.