`पाइप`ड ES6 फ़ंक्शन के लिए JSDoc कैसे उत्पन्न करें


10

मेरे पास ईएस 6-शैली का फ़ंक्शन है जिसे फ़ंक्शन रचना का उपयोग करके परिभाषित किया गया है 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 के साथ इस प्रकार के कार्यों की घोषणा कैसे करते हैं? और मुझे इस फ़ंक्शन के लिए इंटेलीसेंस के साथ काम करने के लिए कैसे परम मिलें?


जवाबों:


1

VSCode हुड के तहत टाइपस्क्रिप्ट इंजन का उपयोग करता है, जो फ़ंक्शन रचनाओं से प्रकारों का संदर्भ लेने में अच्छा नहीं है, और जैसा कि आपने देखा है, फ़ंक्शन घोषणा के रूप में एक बिंदु-मुक्त संरचना को नहीं पहचानता है।

यदि आप प्रकार के संकेत चाहते हैं, तो आप इसके चारों ओर इंगित किए गए फ़ंक्शन को लपेटकर तर्कबद्ध फ़ंक्शन को निर्दिष्ट कर सकते हैं।

मैं इसे कुछ इस तरह लिखूंगा - ध्यान दें: डिफ़ॉल्ट मान 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);

उदाहरण

दुर्भाग्यवश जेएससीओसी में कोई ऐसा तरीका नहीं है जिससे आप अनाम कार्य के प्रलेखन को ओवरराइड कर सकें जैसे आप करना चाह रहे थे। हालाँकि आप इस तरह 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);

समाधान उदाहरण

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.