`` Pipe`d ES6 işlevi için JSDoc nasıl oluşturulur


10

Ben işlev kompozisyonu ile tanımlanmış bir ES6 tarzı işlevi var 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);

Gördüğünüz gibi bir JSDoc açıklaması eklemeye çalıştım. Ama herhangi bir yerde kullandığımda editörüm VSCode parametrelerini önermiyor. JSDoc ile bu tür işlevleri nasıl bildirirsiniz? Ve bu işlevin Intellisense ile çalışması için nasıl param elde edebilirim?


Yanıtlar:


1

VSCode, türlerin işlev kompozisyonlarından çıkarımında iyi olmayan kaputun altında TypeScript motorunu kullanır ve gördüğünüz gibi noktasız bir kompozisyonu işlev bildirimi olarak tanımaz.

Yazım ipuçları istiyorsanız, sivri bir işlevin etrafına sarılarak oluşturulan işlevin bağımsız değişkenlerini belirtebilirsiniz.

Ben böyle bir şey yazmak istiyorum - not: varsayılan değerler türü ipuçları için JSDoc gereksiz kılar, ama yine de açıklamaları için JSDoc tutmak isteyebilirsiniz. Ayrıca, varsayılan değer yedeklerinin neden olduğu hataların yeterli hata mesajı oluşturduğundan emin olun.

/**
  * 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 içindeki anonim fonksiyonun yorumunu göstermeye çalışacaktır asyncPipe. İçine bir JSDoc yorumu eklerseniz, davranışı görebilirsiniz:

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);

misal

Ne yazık ki, JSDoc'ta sizin gibi anonim işlevin belgelerini geçersiz kılmanın bir yolu yoktur. Bununla birlikte, VSCode'a olan niyetinizi bu şekilde zorlayabilirsiniz, bunun ekstra bir işlev çağrısı getirdiğini unutmayın:

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);

çözüm örneği

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.