वेबस्टॉर्म में चेतावनी के अनसुलझे टन कैसे लड़े?


110

मेरे पास एक फ़ंक्शन है जो सर्वर से डेटा लेता है:

function getData(data){
    console.log(data.someVar);
}

वेबस्टॉर्म कहता है कि someVar- एक अनसुलझे चर है। मुझे ऐसी चेतावनियों से क्या छुटकारा मिल सकता है?

मुझे कई विकल्प दिखाई देते हैं:

  • Ide सेटिंग्स में चेतावनी को दबाएं;
  • फ़ील्ड्स ( विवरण ) के साथ एक json स्रोत फ़ाइल जोड़ें ;
  • सरणियों-जैसे सिंटैक्स का उपयोग करें data['some_unres_var']:;

इसके अलावा वेबस्टॉर्म ने मुझे "डेटा" के लिए नामस्थान बनाने की पेशकश की (जैसे एक एनोटेशन जोड़ें /** @namespace data.some_unres_var*/), इस तरह के क्षेत्र का निर्माण करें, या इसका नाम बदलें।


2
@hellboy त्वरित उत्तर: राइट-क्लिक करें -> जावास्क्रिप्ट लाइब्रेरी का उपयोग करें -> सुनिश्चित करें कि HTML की जाँच की गई है। प्रोजेक्ट सेटिंग्स में उपलब्ध जावास्क्रिप्ट पुस्तकालयों को देखकर इस बात का पालन करें कि क्या हो रहा है की बेहतर समझ प्राप्त करने के लिए।
ओवेन्समार्टिन

जवाबों:


102

JSDoc का उपयोग करें:

/**
 * @param {{some_unres_var:string}} data
 */
function getData(data){
    console.log(data.some_unres_var);
}

8
चरों के लिए इस वाक्यविन्यास का प्रयोग करें/** * @type {Object} * @property {string} sortval - value to sort by */ var a;
फेरेन टैकस

3
आप ऐसा कैसे करेंगे जब फ़ंक्शन एक अनाम फ़ंक्शन है? as in ........। तब (फंक्शन (डेटा) {....})
डेविड वी।

1
क्या वैश्विक चर को परिभाषित करने के लिए एक समान विधि है? मैं अपने वेब ऐप में एक बाहरी पुस्तकालय का उल्लेख कर रहा हूं, मुझे जैसे सामान का उपयोग करने की आवश्यकता है MediumEditor, लेकिन इंटेलीज मुझे कुख्यात अनसुलझे चर चेतावनी देता है।
बोरिसलेमके 16

@borislemke: यह उत्तर उन चरों के लिए काम नहीं करेगा जो पैरामीटर नहीं हैं। सामान्य समाधान @namespace का उपयोग करना है
डैन डैस्केल्स्कु

45

ऑब्जेक्ट JSDoc। फिर इसके सदस्य।

/**
 * @param data          Information about the object.
 * @param data.member   Information about the object's members.
 */
function getData(data){
    console.log(data.member);
}
  • @property स्थानीय चर (गैर पैरामीटर) के लिए
  • PyCharm में परीक्षण किया गया। @ निकोली ने पुष्टि की कि यह वेबस्टॉर्म में काम करता है।
  • {{ member:type }}वाक्य रचना एंड्रियास Django टेम्पलेट के साथ संघर्ष हो सकता का सुझाव दिया।
  • @Param विकी का हवाला देते हुए जॉनी बुकानन के जवाब के लिए धन्यवाद ।

ऑब्जेक्ट के सरणियों को दस्तावेज़ित करने के लिए , []JSDoc के अनुसार कोष्ठक का उपयोग करें :

/**
 * @param data
 * @param data.array_member[].foo
 */

उन चरों के बारे में जो पैरामीटर नहीं हैं? सामान्य समाधान @namespace का उपयोग करना है
डैन डैस्केल्स्कु

1
मैं वेबस्टॉर्म में जटिल वस्तुओं के काम के लिए इस संकेतन की पुष्टि कर सकता हूं।
निकोली

18

अन्य सभी उत्तर सामान्य मामले के लिए गलत हैं। यदि आपको dataएक पैरामीटर के रूप में नहीं मिलता है तो क्या होगा ? आपके पास तब JSDoc नहीं है:

function niceApiCall(parameters) {
  const result = await ...  // HTTP call to the API here
  for (const e of result.entries) {
    .. // decorate each entry in the result
  }
  return result;
}

WebStorm चेतावनी देगा कि "result.entries" एक अनसुलझे चर (क्षेत्र) है।

एक @namespaceघोषणा को जोड़ने के लिए सामान्य समाधान है :

function niceApiCall(parameters) {
  /** @namespace result.entries **/
  const result = await ...  // HTTP call to the API here
  for (const e of result.entries) {
    .. // decorate each entry in the result
  }
  return result;
}

2
इस समाधान के लिए धन्यवाद। मैं कई गुण एक API से लौटे अपने तकनीक मुझे लगता है मैं उनमें से बहुत कुछ सूचीबद्ध करने के लिए त्रुटियों मैं इस तरह दिखाई दे रही है से बचने के लिए की आवश्यकता होगी का उपयोग कर तो है: `` `/ ** @namespace req.headers.signaturecertchainurl / / @ namespace req.headers.signature / / @namespace req.headers.slots / / @namespace req.headers.nutrientslot ** / `` क्या कोई उच्च स्तरीय नेमस्पेस (जैसे req.headers) बनाने का एक तरीका है और बच्चों को इसके लिए स्वचालित रूप से असाइन करें? (टिप्पणी में कोई प्रारूपण के लिए खेद है!)
जेम्स

@ नाम: यह एक अच्छा सवाल है, और मैंने भी देखा है (सफलता के बिना) कम से कम सूची के लिए प्रति पंक्ति क्षेत्र की तुलना में अधिक।
डैन डेस्केल्सस्कु

6

अनाम फ़ंक्शन अभिव्यक्ति के साथ एक डमी जेएस फ़ाइल का उपयोग करते हुए, जोसन शाब्दिक रूप से वापस लौट रहा है, जैसा कि http://devnet.jetbrains.com/message/5366907 पर लिखा गया है , एक समाधान हो सकता है। मैं एक नकली वैरिएबल बनाने का भी सुझाव दे सकता हूं, जो इस json मान को धारण करेगा, और वेबस्टॉर्म को वास्तविक प्रकार क्या है, यह बताने के लिए @ varam एनोटेशन के मान के रूप में इस संस्करण का उपयोग करें। पसंद:

var jsontext = {"some_unres_var":"val"};
/** @param {jsontext} data */
function getData(data){
    console.log(data.some_unres_var);
}

Http://devnet.jetbrains.com/message/5504337#5504337 भी देखें


1
JetBrains फोरम पर ऐलेना का सुझाव एक अजीब समाधान है । सामान्य समाधान @namespace का उपयोग करना है
दान डैस्कलेस्क्यू

3

विनाशकारी उपयोग, ल्यूक।

function getData(data){
    const {member} = data;
    console.log(member);
}

-1

WebStorm IDE पर दी गई चेतावनियों को हटाने के लिए आप केवल निरीक्षण विकल्पों को अनचेक कर सकते हैं:

  • अनारक्षित जावास्क्रिप्ट फ़ंक्शन
  • अनारक्षित जावास्क्रिप्ट चर

पी एस । यह IDE पर चेतावनी को हटा देगा, लेकिन मुझे नहीं लगता कि यह सबसे अच्छा विचार है, क्योंकि हम Webstorm जैसी IDE में सर्वश्रेष्ठ उपयोगिताओं में से एक को खो देंगे, जिससे हमारे कोड की गुणवत्ता खराब हो सकती है।

फिर भी, यदि आप मेनू में अनुसरण करना चाहते हैं: फ़ाइल > सेटिंग्स > संपादक > निरीक्षण हम जावास्क्रिप्ट चेतावनी को अक्षम कर सकते हैं

निम्न चित्र की तरह:

विकल्प अनचेक करें


यह एक बुरा विचार है, क्योंकि यह JS को संपादित करने के लिए IDE का उपयोग करने की बहुत सारी उपयोगिता को हटा देगा। मुद्दा यह है कि जावास्क्रिप्ट डॉट-नोटेशन का उपयोग निरीक्षण को भ्रमित करता है, यह नहीं कि निरीक्षण अक्षम होना चाहिए।
विल हैरिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.