Webstorm'da tonlarca çözülmemiş değişken uyarısıyla nasıl savaşılır?


110

Sunucudan veri alan bir işlevim var:

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

Webstorm, someVar- çözümlenmemiş bir değişken olduğunu söylüyor . Bu tür uyarılardan ne kurtulabilirim?

Birkaç seçenek görüyorum:

  • İde ayarlarında uyarıları bastırın;
  • Alanlar ( ayrıntılar ) içeren bir json kaynak dosyası ekleyin ;
  • Diziler benzeri sözdizimi kullanın data['some_unres_var']:;

Ayrıca Webstorm bana "veriler" için ad alanı oluşturmamı (gibi bir ek açıklama eklememi /** @namespace data.some_unres_var*/), böyle bir alanı oluşturmamı veya yeniden adlandırmamı öneriyor .


2
@hellboy Hızlı cevap: sağ tıklayın -> Javascript Kitaplığını Kullan -> HTML'nin işaretli olduğundan emin olun. Neler olup bittiğini daha iyi anlamak için proje ayarlarında mevcut javascript kitaplıklarına bakarak bunu takip edin.
owensmartin

Yanıtlar:


102

JSDoc kullanın:

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

8
Değişkenler için bu sözdizimini kullanın/** * @type {Object} * @property {string} sortval - value to sort by */ var a;
Ferenc Takacs

3
İşlev bir anonimlik işlevi olduğunda bunu nasıl yaparsınız? olduğu gibi ......... sonra (işlev (veri) {....})
David V.

1
Global değişkenleri tanımlamak için benzer bir yöntem var mı? Web uygulamamda harici bir kitaplığa referansta bulunuyorum, gibi şeyler kullanmam gerekiyor MediumEditor, ancak intellij bana rezil çözülmemiş değişken uyarısı veriyor.
borislemke

@borislemke: Bu cevap parametre olmayan değişkenler için işe yaramayacaktır. Genel çözüm @ isim alanını kullanmaktır .
Dan Dascalescu

46

JSDoc nesneyi. Sonra üyeleri.

/**
 * @param data          Information about the object.
 * @param data.member   Information about the object's members.
 */
function getData(data){
    console.log(data.member);
}
  • @property yerel değişkenler için (parametreler olmayan)
  • PyCharm'da test edilmiştir. @Nicholi, Webstorm'da çalıştığını doğruladı.
  • {{ member:type }}Sözdizimi Andreas Django şablonları ile çakışabilir önerdi.
  • Jonny Buchanan'ın @param wiki'den alıntı yaptığı cevaba teşekkürler .

Nesne dizilerini belgelemek için , []JSDoc'un önerdiği gibi köşeli parantez kullanın :

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

Parametre olmayan değişkenler ne olacak? Genel çözüm @ isim alanını kullanmaktır .
Dan Dascalescu

1
Karmaşık nesneler için bu gösterimin WebStorm'da çalıştığını doğrulayabilirim.
Nicholi

18

Genel durum için diğer tüm cevaplar yanlıştır. Ya databir parametre alamazsanız ? JSDoc'unuz yoksa:

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" in çözümlenmemiş bir değişken (alan) olduğu konusunda uyaracaktır.

Genel çözüm, bir @namespacebeyan eklemektir :

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
Bu çözüm için teşekkürler. Bir API'den dönen birçok özniteliğim var, bu nedenle tekniğinizi kullanarak, gördüğüm hataları önlemek için çoğunu listelemem gerektiğini varsayıyorum: `` `/ ** @namespace req.headers.signaturecertchainurl / / @ ad alanı req.headers.signature / / @namespace req.headers.slots / / @namespace req.headers.nutrientslot ** / `` Daha yüksek düzeyde bir ad alanı (örneğin req.headers) oluşturmanın ve çocukları buna otomatik olarak atamanın bir yolu var mı ? (yorumlarda biçimlendirme yapılmadığı için özür dilerim!)
James

@James: Bu iyi bir soru ve en azından satır başına alandan daha fazlasını listelemeye de baktım (başarılı olamadım).
Dan Dascalescu

6

http://devnet.jetbrains.com/message/5366907 adresinde yazdığı gibi json değişmezini döndüren anonim işlev ifadesine sahip sahte bir js dosyası kullanmak bir çözüm olabilir. Ayrıca, bu json değerini tutacak sahte bir değişken oluşturmayı önerebilirim ve bu değişkeni, WebStorm'un gerçek türün ne olduğunu bilmesini sağlamak için @param ek açıklamasının bir değeri olarak kullanabilirim. Sevmek:

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

Ayrıca bkz. Http://devnet.jetbrains.com/message/5504337#5504337


1
Elena'nın JetBrains forumundaki önerisi tuhaf bir çözüm . Genel çözüm @ isim alanını kullanmaktır .
Dan Dascalescu

3

Yıkıcı kullanım, Luke.

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

-1

WebStorm IDE üzerindeki uyarıları kaldırmak için, aşağıdakiler için inceleme seçeneklerinin işaretini kaldırmanız yeterlidir:

  • Çözülmemiş Javascript işlevi
  • Çözümlenmemiş Javascript değişkeni

ps . bu, IDE üzerindeki uyarıları kaldıracaktır, ancak bunun en iyi fikir olduğunu sanmıyorum, çünkü kodumuzun kalitesini kötüleştirebilecek Webstorm gibi bir IDE'deki en iyi yardımcı programlardan birini kaybedeceğiz.

Yine de menüden takip etmek isterseniz: Dosya > Ayarlar > Düzenleyici > Denetimler Javascript uyarılarını devre dışı bırakabiliriz

Aşağıdaki resim gibi:

seçeneklerin işaretini kaldırın


JS'yi düzenlemek için bir IDE kullanmanın pek çok yararlılığını ortadan kaldıracağı için bu kötü bir fikirdir. Mesele şu ki, JavaScript noktalı gösterimi kullanmak incelemeyi karıştırır, incelemenin devre dışı bırakılması gerekmez.
Will Harris
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.