จะต่อสู้กับตัวแปรที่ไม่ได้รับการแก้ไขจำนวนมากที่เตือนใน Webstorm ได้อย่างไร


110

ฉันมีฟังก์ชันที่รับข้อมูลจากเซิร์ฟเวอร์:

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

Webstorm กล่าวว่าsomeVar- เป็นตัวแปรที่ไม่ได้รับการแก้ไข ฉันจะกำจัดคำเตือนดังกล่าวได้อย่างไร?

ฉันเห็นหลายตัวเลือก:

  • ระงับคำเตือนในการตั้งค่า ide;
  • เพิ่มไฟล์ซอร์ส json พร้อมฟิลด์ ( รายละเอียด );
  • ใช้ไวยากรณ์เหมือนอาร์เรย์: data['some_unres_var'];

นอกจากนี้ Webstorm ยังเสนอให้ฉันสร้างเนมสเปซสำหรับ "ข้อมูล" (เพิ่มคำอธิบายประกอบเช่น/** @namespace data.some_unres_var*/) สร้างฟิลด์ดังกล่าวหรือเปลี่ยนชื่อ


2
@hellboy คำตอบด่วน: คลิกขวา -> ใช้ Javascript Library -> ตรวจสอบให้แน่ใจว่าได้เลือก HTML แล้ว ติดตามสิ่งนี้โดยดูที่ไลบรารี javascript ที่มีอยู่ในการตั้งค่าโปรเจ็กต์เพื่อทำความเข้าใจสิ่งที่เกิดขึ้น
owensmartin

คำตอบ:


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;
Ferenc Takacs

3
คุณจะทำเช่นนั้นได้อย่างไรเมื่อฟังก์ชันเป็นฟังก์ชัน anonymouns? เช่น ........ . แล้ว (ฟังก์ชัน (ข้อมูล) {.... })
David V.

1
มีวิธีการที่คล้ายกันในการกำหนดตัวแปรส่วนกลางหรือไม่? ฉันกำลังอ้างถึงไลบรารีภายนอกในเว็บแอปของฉันฉันจำเป็นต้องใช้สิ่งต่างๆเช่นMediumEditorแต่ intellij ให้คำเตือนตัวแปรที่ไม่ได้รับการแก้ไขที่น่าอับอาย
borislemke

@borislemke: คำตอบนี้ใช้ไม่ได้กับตัวแปรที่ไม่ใช่พารามิเตอร์ การแก้ปัญหาทั่วไปคือการใช้ @namespace
Dan Dascalescu

46

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 @Nicholi ยืนยันว่าใช้งานได้ใน Webstorm
  • {{ member:type }}Andreas ไวยากรณ์ปัญหาความขัดแย้งพฤษภาคมกับแม่แบบ Django
  • ขอขอบคุณที่จอนนี่บูคานันของคำตอบที่อ้างวิกิพีเดีย @param

ในการจัดทำเอกสารอาร์เรย์ของวัตถุให้ใช้[]วงเล็บตามที่ JSDoc แนะนำ :

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

แล้วตัวแปรที่ไม่ใช่พารามิเตอร์ล่ะ? การแก้ปัญหาทั่วไปคือการใช้ @namespace
Dan Dascalescu

1
ฉันสามารถยืนยันสัญกรณ์นี้สำหรับอ็อบเจ็กต์ที่ซับซ้อนที่ทำงานใน WebStorm
Nicholi

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) และกำหนดเด็ก ๆ โดยอัตโนมัติหรือไม่ (ขออภัยที่ไม่มีการจัดรูปแบบในความคิดเห็น!)
James

@ เจมส์: นั่นเป็นคำถามที่ดีและฉันก็ดู (ไม่ประสบความสำเร็จ) อย่างน้อยก็มีรายชื่อมากกว่าฟิลด์ต่อบรรทัด
Dan Dascalescu

6

การใช้ไฟล์ js ดัมมี่ที่มีนิพจน์ฟังก์ชันที่ไม่ระบุชื่อที่ส่งคืนตัวอักษร json ตามที่เขียนไว้ที่http://devnet.jetbrains.com/message/5366907อาจเป็นวิธีแก้ปัญหา ฉันสามารถแนะนำให้สร้างตัวแปรปลอมที่จะเก็บค่า json นี้ไว้และใช้ var นี้เป็นค่าของคำอธิบายประกอบ @param เพื่อให้ WebStorm รู้ว่าประเภทที่แท้จริงคืออะไร ชอบ:

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
Dan Dascalescu


-1

หากต้องการลบคำเตือนบน WebStorm IDE คุณสามารถยกเลิกการเลือกตัวเลือกการตรวจสอบสำหรับ:

  • ฟังก์ชัน Javascript ที่ไม่ได้รับการแก้ไข
  • ตัวแปร Javascript ที่ไม่ได้รับการแก้ไข

ปล . สิ่งนี้จะลบคำเตือนใน IDE แต่ฉันไม่คิดว่านั่นเป็นความคิดที่ดีที่สุดเพราะเราจะสูญเสียหนึ่งในยูทิลิตี้ที่ดีที่สุดใน IDE เช่น Webstorm ซึ่งอาจทำให้คุณภาพของโค้ดแย่ลง

อย่างไรก็ตามหากคุณต้องการติดตามในเมนู: ไฟล์ > การตั้งค่า > ตัวแก้ไข > การตรวจสอบเราสามารถปิดการใช้งานคำเตือน Javascript

ดังภาพต่อไปนี้:

ยกเลิกการเลือกตัวเลือก


นี่เป็นความคิดที่ไม่ดีเนื่องจากจะลบประโยชน์มากมายของการใช้ IDE ในการแก้ไข JS ประเด็นคือการใช้สัญลักษณ์จุดจาวาสคริปต์ทำให้การตรวจสอบสับสนไม่ใช่ว่าควรปิดการใช้งานการตรวจสอบ
Will Harris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.