правило no-unused-variable TSLint не работает с закрытой @HostBinding - PullRequest
0 голосов
/ 01 октября 2018

В моем файле TSLint у меня есть:

"no-unused-variable": true

В моих компонентах у меня иногда есть:

// tslint:disable-next-line:no-unused-variable
@HostBinding('class') private classes = 'my-theme';

Поскольку classes является частным, TSLint жалуется, поэтому я имеюотключать TSLint каждый раз.

Я не хочу сделать @HostBinding общедоступным из-за инкапсуляции.

Каков рекомендуемый способ решения этой проблемы?

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

После некоторых исследований решение состоит в том, чтобы просто сделать его public

@HostBinding('class') public classes = 'my-theme';

Это потому, что с точки зрения Angular он получает доступ к компоненту, что-то вроде component.classes.Поэтому семантически это публично.По этой же причине @Input должно быть общедоступным, даже если вы не используете его в шаблоне.

Источники:

https://stackoverflow.com/a/38469573/3481582

0 голосов
/ 24 февраля 2019

Насколько я знаю, у вас есть два варианта.

1 - Используйте protected.Самостоятельно объясняю:

@HostBinding('class') protected classes = 'my-theme';

2 - Используйте ignore-pattern.Имена переменных и импорта, соответствующие указанному шаблону, будут игнорироваться этим правилом в соответствии с здесь .Шаблон является регулярным выражением, и ^_ означает любую строку, начинающуюся с _.

tslint.json:

...
"no-unused-variable": [true, {"ignore-pattern": "^_"}]
...

компонент:

@HostBinding('class') private _classes = 'my-theme';

Бонус

Если ваша переменная доступна только для чтения, вы также можете сделать один из них.Это не предотвратит ошибку tslint, но предотвратит случайное изменение переменной, если вас беспокоит инкапсуляция.

@HostBinding('class') private readonly classes = 'my-theme';
@HostBinding('class') private get classes() { return 'my-theme'; }
...