Bagaimana cara melawan banyak variabel yang belum terselesaikan peringatan di Webstorm?


110

Saya memiliki fungsi yang mengambil data dari server:

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

Webstorm mengatakan bahwa someVar- adalah variabel yang belum terselesaikan. Apa yang bisa saya hilangkan dari peringatan semacam itu?

Saya melihat beberapa opsi:

  • Menekan peringatan dalam pengaturan ide;
  • Tambahkan file sumber json dengan kolom ( detail );
  • Gunakan array-seperti sintaks: data['some_unres_var'];

Juga Webstorm menawarkan saya untuk membuat namespace untuk "data" (menambahkan anotasi seperti /** @namespace data.some_unres_var*/), membuat bidang tersebut, atau mengganti namanya.


2
@hellboy Jawaban cepat: klik kanan -> Gunakan Javascript Library -> pastikan HTML dicentang. Ikuti ini dengan melihat perpustakaan javascript yang tersedia dalam pengaturan proyek untuk mendapatkan pemahaman yang lebih baik tentang apa yang sedang terjadi.
owensmartin

Jawaban:


102

Gunakan JSDoc:

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

8
Untuk variabel, gunakan sintaks ini/** * @type {Object} * @property {string} sortval - value to sort by */ var a;
Ferenc Takacs

3
Bagaimana Anda melakukannya jika fungsinya adalah fungsi anonymouns? seperti dalam ......... lalu (fungsi (data) {....})
David V.

1
Apakah ada metode serupa untuk mendefinisikan variabel global? Saya mereferensikan perpustakaan eksternal di aplikasi web saya, saya perlu menggunakan hal-hal seperti MediumEditor, tetapi intellij memberi saya peringatan variabel yang tidak terselesaikan yang terkenal.
borislemke

@borislemke: jawaban ini tidak akan berfungsi untuk variabel yang bukan parameter. Solusi umum adalah menggunakan @namespace .
Dan Dascalescu

45

JSDoc objek. Kemudian anggotanya.

/**
 * @param data          Information about the object.
 * @param data.member   Information about the object's members.
 */
function getData(data){
    console.log(data.member);
}
  • @property untuk variabel lokal (non parameter)
  • Diuji di PyCharm. @Nicholi mengonfirmasi bahwa ini berfungsi di Webstorm.
  • The {{ member:type }}Andreas sintaks menyarankan mungkin bertentangan dengan Django template.
  • Terima kasih atas jawaban Jonny Buchanan yang mengutip wiki @param .

Untuk mendokumentasikan array objek , gunakan []tanda kurung seperti yang disarankan JSDoc :

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

Bagaimana dengan variabel yang bukan parameter? Solusi umum adalah menggunakan @namespace .
Dan Dascalescu

1
Saya dapat mengkonfirmasi notasi ini untuk objek kompleks yang bekerja di WebStorm.
Nicholi

18

Semua jawaban lain salah untuk kasus umum. Bagaimana jika Anda tidak mendapatkan datasebagai parameter? Anda tidak memiliki JSDoc maka:

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 akan memperingatkan bahwa "result.entries" adalah variabel yang belum terselesaikan (bidang).

Solusi umumnya adalah menambahkan @namespacedeklarasi:

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
Terima kasih untuk solusi ini. Saya memiliki banyak atribut yang dikembalikan dari API jadi dengan menggunakan teknik Anda, saya kira saya perlu mencantumkan banyak atribut untuk menghindari kesalahan yang saya lihat seperti ini: `` / ** @namespace req.headers.signaturecertchainurl / / @ namespace req.headers.signature / / @namespace req.headers.slots / / @namespace req.headers.nutrientslot ** / `` Apakah ada cara untuk membuat namespace tingkat yang lebih tinggi (misalnya req.headers) dan secara otomatis menugaskan turunan ke dalamnya? (maaf untuk tidak ada format dalam komentar!)
James

@ James: itu pertanyaan yang bagus, dan saya juga telah mencari (tanpa hasil) untuk setidaknya mencantumkan lebih dari pada bidang per baris.
Dan Dascalescu

6

menggunakan file js tiruan dengan ekspresi fungsi anonim yang mengembalikan literal json, seperti yang tertulis di http://devnet.jetbrains.com/message/5366907 , mungkin bisa menjadi solusi. Saya juga dapat menyarankan untuk membuat variabel palsu yang akan menampung nilai json ini, dan menggunakan var ini sebagai nilai anotasi @param untuk memberi tahu WebStorm apa tipe sebenarnya. Suka:

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

Lihat juga http://devnet.jetbrains.com/message/5504337#5504337


1
Saran Elena di forum JetBrains adalah solusi yang aneh . Solusi umum adalah menggunakan @namespace .
Dan Dascalescu

3

Penggunaan yang merusak, Luke.

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

-1

Untuk menghapus peringatan di The WebStorm IDE Anda cukup menghapus centang opsi inspeksi untuk:

  • Fungsi Javascript yang belum terselesaikan
  • Variabel Javascript yang tidak terselesaikan

ps . ini akan menghapus peringatan pada IDE, tapi menurut saya itu bukan ide terbaik, karena kita akan kehilangan salah satu utilitas terbaik di IDE seperti Webstorm, yang dapat memperburuk kualitas kode kita.

Meski begitu, jika ingin mengikuti di menu: File > Settings > Editor > Inspections kita bisa menonaktifkan peringatan Javascript.

Seperti gambar berikut ini:

hapus centang opsi


Ini ide yang buruk, karena akan menghilangkan banyak kegunaan menggunakan IDE untuk mengedit JS. Intinya adalah bahwa menggunakan JavaScript dot-notation membingungkan inspeksi, bukan inspeksi harus dinonaktifkan.
Will Harris
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.