无未使用的变量 TSLint 规则不适用于专用@HostBinding



在我的 TSLint 文件中,我有:

"no-unused-variable": true

在我的组件中,我有时有:

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

因为classes是私有的,所以 TSLint 抱怨,所以我每次都必须禁用 TSLint。

不想因为封装而公开@HostBinding

解决此问题的推荐方法是什么?

据我所知,您有两种选择。

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'; }

经过一些研究,解决方案是简单地让它public

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

这是因为从 Angular 的角度来看,它访问组件,类似于component.classes.因此,从语义上讲,它是公开的。这与@Input应该公开的原因相同,即使您不在模板中使用它。

来源:

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

最新更新