Webstorm에서 경고하는 수많은 미해결 변수와 싸우는 방법은 무엇입니까?


110

서버에서 데이터를 가져 오는 함수가 있습니다.

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

Webstorm은 someVar-가 해결되지 않은 변수 라고 말합니다 . 그러한 경고를 어떻게 제거 할 수 있습니까?

몇 가지 옵션이 있습니다.

  • ide 설정에서 경고를 억제합니다.
  • 필드 ( details )가 있는 json 소스 파일을 추가하십시오 .
  • 배열과 유사한 구문 사용 : data['some_unres_var'];

또한 Webstorm은 "데이터"(와 같은 주석 추가)에 대한 네임 스페이스를 /** @namespace data.some_unres_var*/생성하거나, 이러한 필드를 생성하거나, 이름을 변경하도록 제안 합니다.


2
@hellboy 빠른 답변 : 오른쪽 클릭-> Javascript 라이브러리 사용-> HTML이 선택되어 있는지 확인하십시오. 프로젝트 설정에서 사용 가능한 자바 스크립트 라이브러리를 살펴보고 무슨 일이 일어나고 있는지 더 잘 이해하십시오.
owensmartin 2014 년

답변:


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
함수가 익명 함수일 때 어떻게할까요? as in ........ .then (function (data) {....})
David V.

1
전역 변수를 정의하는 비슷한 방법이 있습니까? 내 웹 앱에서 외부 라이브러리를 참조하고 있는데, 같은 것을 사용해야 MediumEditor하지만 intellij는 악명 높은 미해결 변수 경고를 제공합니다.
borislemke

@borislemke :이 대답은 매개 변수가 아닌 변수에는 작동하지 않습니다. 일반적인 해결책은 @namespace사용하는 것 입니다.
Dan Dascalescu

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에서 테스트되었습니다. @Nicholi는 Webstorm에서 작동하는지 확인합니다.
  • {{ member:type }}구문 안드레아스 장고 템플릿과 충돌 할 수 있습니다 제안했다.
  • @param wiki를 인용 한 Jonny Buchanan의 답변 덕분 입니다 .

객체 배열 을 문서화하려면 []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

@James : 좋은 질문입니다. 그리고 저는 (성공없이) 적어도 한 줄에 필드에있는 것보다 더 많은 것을 나열하려고했습니다.
Dan Dascalescu

6

http://devnet.jetbrains.com/message/5366907에 작성된대로 json 리터럴을 반환하는 익명 함수 표현식과 함께 더미 js 파일을 사용하는 것이 해결책이 될 수 있습니다. 또한이 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 포럼에 대한 Elena의 제안은 이상한 해결책 입니다. 일반적인 해결책은 @namespace사용하는 것 입니다.
Dan Dascalescu

3

구조 분해 사용, 루크.

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

-1

WebStorm IDE에서 경고를 제거하려면 다음 검사 옵션을 선택 취소하면됩니다.

  • 해결되지 않은 자바 스크립트 함수
  • 해결되지 않은 자바 스크립트 변수

추신 . 이렇게하면 IDE에서 경고가 제거되지만 Webstorm과 같은 IDE에서 최고의 유틸리티 중 하나가 손실되어 코드의 품질이 저하 될 수 있기 때문에 이것이 최선의 아이디어라고 생각하지 않습니다.

그럼에도 불구하고 메뉴에서 따르고 싶다면 File > Settings > Editor > Inspections 자바 스크립트 경고를 비활성화 할 수 있습니다.

다음 그림과 같이 :

옵션 선택 취소


이것은 JS 편집을 위해 IDE를 사용하는 많은 유용성을 제거하기 때문에 나쁜 생각입니다. 요점은 JavaScript 점 표기법을 사용하면 검사를 비활성화해야한다는 것이 아니라 검사를 혼란스럽게한다는 것입니다.
Will Harris
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.