Как избежать ложных предупреждений о неиспользуемых параметрах в TypeScript - PullRequest
0 голосов
/ 10 мая 2018

Я столкнулся с этой кучей и наконец решил выяснить, как правильно это сделать. Если у меня есть абстрактный родительский класс, который объявляет метод, а затем некоторые из конкретных подклассов реализуют реальную логику в своей реализации (и, очевидно, используют параметры метода), но некоторые из подклассов не должны делайте что-нибудь в этом методе (поэтому не используйте параметры метода) - те, которые не должны ничего делать, генерируют ложные (на мой взгляд) предупреждения в моем коде.

Например, если у меня есть несколько классов, которые выглядят так:

abstract class Child {
  constructor(protected name: string) {
    connsole.log(name + " was just born.");
  }

  abstract tellThemToDoSomething(command: string);
}

class GoodChild extends Child {
  constructor(name: string) { super(name); }
  tellThemToDoSomething(command: string) {
    console.log("I will do " + command);
  }
}

class BadChild extends Child {
  constructor(name: string) { super(name); }
  tellThemToDoSomething(command: string) {
    // bad children just ignore what their parents tell them
  }
}

Затем я получаю предупреждение (TSLint? JSLint? WebStorm?) В WebStorm для неиспользуемого параметра в методе BadChild tellThemToDoSomethign().

Я знаю несколько вариантов, но ни один из них не выглядит великолепным.

1) Проигнорируйте это (но это кажется неоптимальным, так как я стану слепым к реальным предупреждениям)

2) Удалите параметр из реализации метода BadChild (но это, к сожалению, удаляет полезную информацию, так как я, возможно, позже захочу реализовать ее, и отсутствие там подписи усложняет задачу, и я также получаю ошибки от ожидающих там звонящих. быть параметрами - хотя, учитывая, что я должен иметь возможность вызывать метод с посторонними параметрами в JavaScript, я могу обойти эту проблему)

3) Скажите WebStorm (TSLint) прекратить предупреждение о неиспользуемых параметрах (но это кажется неоптимальным, поскольку я не получу предупреждения в других реальных проблемных ситуациях)

4) Сделайте что-нибудь бессмысленное с параметром, чтобы он не использовался (очевидно, не велик)

Что делают опытные Java / TypeScript-кодеры в подобных ситуациях? Есть ли простой способ сказать WebStorm / TSLint игнорировать параметр в отдельных случаях, как это? Или, что еще лучше, способ заставить его игнорировать неиспользуемые параметры в реализациях абстрактных методов подкласса, если некоторые реализации действительно используют параметры?

Я немного не уверен в том, откуда исходит предупреждение, так как мое краткое прибегание к поиску показывает предупреждение TSLint для неиспользуемых переменных, но не для неиспользуемых параметров, и добавление // tslint:ignore-next-line:no-unused-parameter (или no-unused-variable) не заставляйте предупреждение уходить. Так что, я думаю, возможно, предупреждение приходит от самого WebStorm? Кроме того, предупреждение «Неиспользуемый параметр Foo: проверяет параметр JavaScript, локальную переменную, функцию, классы и объявления закрытых членов, которые должны использоваться в данной области файла». Так что это не похоже на предупреждение TSLint. И если я загляну в свой WebStorm Preferences -> Languages & Frameworks -> Javascript -> Code Quality Tools, ни один из линтеров не будет включен (JSLint, JSHint, ESLint и т. Д.). Так есть идеи, откуда исходит ошибка?

Я недостаточно долго программировал на TypeScript, чтобы понять, каким должен быть идеальный циферблат в этом предупреждении.

1 Ответ

0 голосов
/ 10 мая 2018

Это предупреждение вызвано проверками JetBrains PhpStorm / WebStorm.

Обычный способ, которым должным образом обрабатывается TypeScript, заключается в подчеркивании неиспользуемых параметров. К сожалению, это соглашение не поддерживается IDE JetBrains.

Возможно подавить проверки на месте в некоторых случаях, вызвав список предложений с помощью Alt+Enter / ⌥+Enter и выбрав Подавить для утверждения (для меня это никогда не работало для Инспекции IDE).

Возможно подавить проверки в результатах проверок .

Это приводит к добавлению комментария над методом и влияет на все неиспользуемые параметры в сигнатуре этого метода:

// noinspection JSUnusedLocalSymbols
tellThemToDoSomething(command: string) {}

Это можно добавить к живым шаблонам и т. Д.

...