`পাইপড ES6 ফাংশনের জন্য কীভাবে জেএসডোক তৈরি করবেন


10

আমার একটি 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);

আপনি দেখতে পাচ্ছেন যে আমি এটিতে জেএসডোকের বর্ণনা যুক্ত করার চেষ্টা করেছি। তবে আমি যখনই এটি অন্য কোথাও ব্যবহার করি তখন আমার সম্পাদক, ভিএসকোড এর পরামিতিগুলির পরামর্শ দেয় না। আপনি কীভাবে জেএসডকের সাথে এই ধরণের ফাংশনগুলি ঘোষণা করবেন? এবং আমি কীভাবে এই ফাংশনটির জন্য ইন্টেলিসেন্সের সাথে কাজ করতে পারি?


উত্তর:


1

ভিএসকোড হুডের নীচে টাইপস্ক্রিপ্ট ইঞ্জিন ব্যবহার করে, যা ফাংশন রচনাগুলি থেকে অনুমানকারী ধরণেরগুলিতে ভাল নয় এবং আপনি যেমন দেখেছেন, বিন্দু মুক্ত রচনাটিকে কোনও ফাংশন ঘোষণা হিসাবে স্বীকৃতি দেয় না।

আপনি যদি ইঙ্গিতগুলি টাইপ করতে চান তবে আপনি এটির চারপাশে একটি পয়েন্ট ফাংশন মোড়ানো দ্বারা রচনা ফাংশনটিতে আর্গুমেন্টগুলি নির্দিষ্ট করতে পারেন।

আমি এটি এর মতো কিছু লিখেছি - দ্রষ্টব্য: ডিফল্ট মানগুলি 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

ভিএসকোড ভিতরে অনামী কর্মের মন্তব্যটি প্রদর্শনের চেষ্টা করবে asyncPipe। যদি আপনি এর ভিতরে কোনও জেএসডোক মন্তব্য যুক্ত করেন তবে আপনি আচরণটি দেখতে পাবেন:

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

উদাহরণ

দুর্ভাগ্যক্রমে জেএসডকের কোনও বেনামি ফাংশনের ডকুমেন্টেশন ওভাররাইড করার মতো উপায় নেই যেমন আপনি করার চেষ্টা করছেন। তবে আপনি নিজের উদ্দেশ্যটিকে এইভাবে ভিএসকোডে বাধ্য করতে পারেন, নোট করুন যে এটি একটি অতিরিক্ত ফাংশন কল প্রবর্তন করে:

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.