কিভাবে সীমাবদ্ধ সম্ভাব্য মান সহ jsdoc এ স্ট্রিং টাইপ ডকুমেন্ট করবেন


96

আমার একটি ফাংশন হচ্ছে যা একটি স্ট্রিং প্যারামিটার গ্রহণ করে। এই পরামিতিটির কয়েকটি সংজ্ঞায়িত সম্ভাব্য মানগুলির মধ্যে একটি হতে পারে। একই নথির ভাল উপায় কি? শেপটাইপ কি এনাম বা টাইপডিফ বা অন্য কিছু হিসাবে সংজ্ঞায়িত করা উচিত?

Shape.prototype.create = function (shapeType) {
    // shapeType can be "rect", "circle" or "ellipse"...
    this.type = shapeType;
};

Shape.prototype.getType = function (shapeType) {
    // shapeType can be "rect", "circle" or "ellipse"...
    return this.type;
};

সমস্যার দ্বিতীয় অংশটি হ'ল সম্ভাব্য মানগুলি shapeTypeসেই ফাইলে shapeTypeজানা নেই যা আপনার প্রস্তাব অনুযায়ী যা সংজ্ঞায়িত করে। বেশ কয়েকটি বিকাশকারী দ্বারা অবদান করা একাধিক ফাইল রয়েছে যারা এর সম্ভাব্য মানগুলিতে যুক্ত করতে পারে shapeType

PS: আমি ব্যবহার করছি jsdoc3


একাধিক ফাইল সমস্যা এটিকে কঠিন করে তোলে। আমি সাধারণত একটি দেখতে enumসংজ্ঞা এবং ফাংশন প্যারামিটার জন্য ইউনিয়ন জন্য: ShapeType|string। তবে এনোমরা ক্লোজার-সংকলক ঘোষণার পরে সাব-টাইপ যুক্ত সমর্থন করে না।
চাদ কিলিংসওয়ার্থ

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

আরেকটি অনুরূপ সমস্যাটি হল এই যে আমি সম্মুখীন হচ্ছি, কিন্তু বিতরণ সম্পত্তি তালিকা সাথে আছেন stackoverflow.com/questions/19113571/...
Shamasis ভট্টাচার্য

নীচের সমস্ত সমাধান আমাদের একটি এনাম তৈরি করতে বাধ্য করে। এই প্রক্রিয়াটিকে আরও সহজ করার জন্য গিটহাবে একটি সক্রিয় বৈশিষ্ট্য অনুরোধ রয়েছে: github.com/jsdoc3/jsdoc/issues/629 । সুতরাং যে কেউ এটি পছন্দ করে এটি সম্ভবত এটি ঘা উচিত।
বি

উত্তর:


26

ডামি এনাম ঘোষণার বিষয়ে:

/**
 * Enum string values.
 * @enum {string}
 */
Enumeration = {
    ONE: "The number one",
    TWO: "A second number"
};

/**
 * Sample.
 * @param {Enumeration} a one of the enumeration values.
 */
Bar.prototype.sample = function(a) {};


b = new Bar();

bar.sample(Enumeration.ONE)

যদিও আপনাকে এটির জন্য কমপক্ষে জাসদককে এনাম ঘোষণা করতে হবে। কোডটি পরিষ্কার এবং আপনি ওয়েবস্টোমে স্বয়ংক্রিয়ভাবে সমাপ্তি লাভ করেন।

একাধিক ফাইল সমস্যা যদিও এইভাবে সমাধান করা যায় না।


হ্যাঁ. গণনা পদ্ধতির একমাত্র আমি ব্যবহারযোগ্য উপায়। যাইহোক, আমি এটিকে একমাত্র ব্যবহারযোগ্য উত্তর হিসাবে গ্রহণ করি - যেহেতু মাল্টি-ফাইল সমস্যা সম্পূর্ণরূপে আরও একটি গল্প!
শামাসিস ভট্টাচার্য

এই পদ্ধতির সাথে সমস্যা হ'ল এটি স্বতন্ত্র মানগুলি নথিভুক্ত করতে দেয় না। জেএসডকের সাথে আমার একটি সমস্যা আছে। github.com/jsdoc3/jsdoc/issues/1065
গাজুস

112

Jsdoc3 এ 2014 এর শেষ অবধি আপনার লেখার সম্ভাবনা রয়েছে:

/**
 * @param {('rect'|'circle'|'ellipse')} shapeType - The allowed type of the shape
 */
Shape.prototype.getType = function (shapeType) {
  return this.type;
};

অবশ্যই এটি কোনও ডেডিকেটেড এনামের মতো পুনরায় ব্যবহারযোগ্য হবে না তবে অনেক ক্ষেত্রে ডামি এনাম ওভারকিল হয় যদি এটি কেবল একটি ফাংশন দ্বারা ব্যবহৃত হয়।

আরও দেখুন: https://github.com/jsdoc3/jsdoc/issues/629#issue-31314808


4
এটি যদি আপনি জানেন যে পরমের ধরণটি কখনই পরিবর্তিত হবে না এটি একটি আরও ভাল সমাধান।
লুকা স্টেব

4
আমার দৃষ্টিতে এটির সেরা সমাধান! ধন্যবাদ.
এজেসি 24

26

কি সম্পর্কে:

/**
 * @typedef {"keyvalue" | "bar" | "timeseries" | "pie" | "table"} MetricFormat
 */

/**
 * @param format {MetricFormat}
 */
export function fetchMetric(format) {
    return fetch(`/matric}`, format);
}

এখানে চিত্র বর্ণনা লিখুন


9

আমি সেখানে অনুমোদিত মান লেখার একটি আনুষ্ঠানিক উপায় মনে করি না JSDoc

আপনি অবশ্যই @param {String('up'|'down'|'left'|'right')}ব্যবহারকারী বি 12 টোস্টারের মতো কিছু লিখতে পারেন ।

এখানে চিত্র বর্ণনা লিখুন

কিন্তু, থেকে রেফারেন্স গ্রহণ করে APIDocjs , এখানে কি আমি সীমাবদ্ধ মান লেখা ওরফে জন্য ব্যবহার করেন allowedValues

/**
 * Set the arrow position of the tooltip
 * @param {String='up','down','left','right'} position pointer position
 */
setPosition(position='left'){
  // YOUR OWN CODE
}

হ্যাঁ, আমি ES6 ব্যবহার করছি।


0

ক্লোজার সংকলক এটি এইভাবে সমর্থন করে: আপনি একটি সীমাবদ্ধ প্রকার নির্ধারণ করতে "@enum" ব্যবহার করতে পারেন। আপনাকে আসলে এনাম সংজ্ঞাতে মানগুলি সংজ্ঞায়িত করতে হবে না। উদাহরণস্বরূপ, আমি একটি "পূর্ণসংখ্যা" টাইপটিকে সংজ্ঞায়িত করতে পারি:

/** @enum {number} */
var Int = {};

/** @return {Int} */
function toInt(val) {
  return /** @type {Int} */ (val|0);
}

ইনট সাধারণত "সংখ্যা" তে নির্ধারিত হয় (এটি একটি সংখ্যা) তবে "সংখ্যা" কিছু জবরদস্তি (castালাই) ছাড়াই "ইনট" এর জন্য নির্ধারিত হয় না।


তবে এটি এর সম্ভাব্য মানগুলিকে সীমাবদ্ধ করে না Int। আমি নিশ্চিত যে অংশটি সম্ভব নয়।
চাদ কিলিংসওয়ার্থ

এটি জেএসে অন্য কোনও ধরণের টিকা বা এনামের মতোই কাজ করে। আপনি কোডটি কীভাবে লিখবেন তা থেকে সীমাবদ্ধতা আসে: প্রতিটি "কাস্ট" একটি লাল পতাকা। যদি আপনি কাস্টসগুলিকে মূল্যবান কারখানার মধ্যে সীমাবদ্ধ করেন তবে আপনি যা চান তা পেতে পারেন: আপনি কোনও সংকেত ছাড়াই 'ইন্ট' তে 'নম্বর' নির্ধারণ করতে পারবেন না।
জন

এটি এখনও {ইন্ট} এর মানগুলিকে সীমাবদ্ধ করে না} :-(
শামাসিস ভট্টাচার্য

নিশ্চিত যে এটি হয়, আপনি কীভাবে এটি তৈরি হয় তা সীমাবদ্ধ করে এবং মান তৈরি করার সময় সীমাবদ্ধতা সীমাবদ্ধ করে আপনি মানটির সীমাবদ্ধ করেন। একটি কাঁচা নম্বর বরাদ্দ করা যাবে না যা আপনার প্রয়োজন।
জন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.