tslint 错误阴影名称:'Observable'
Posted
技术标签:
【中文标题】tslint 错误阴影名称:\'Observable\'【英文标题】:tslint error Shadowed name: 'Observable'tslint 错误阴影名称:'Observable' 【发布时间】:2018-03-29 09:05:38 【问题描述】:运行 tslint 时出现以下错误,我之前没有遇到过。
ERROR: C:/...path..to../observable-debug-operator.ts[27, 13]: Shadowed name: 'Observable'
我按照tutorial 向 Observable 添加了一个调试运算符,它工作正常,除了我收到这个 lint 错误。我一直在使用这个调试操作符,但没有收到 lint 错误,我不知道为什么我现在得到它。
这是第 27 行的代码,用调试方法修改类型定义
declare module 'rxjs/Observable'
interface Observable<T> // line 27
debug: (...any) => Observable<T>;
有谁知道如何清除这个 lint 错误?谢谢!
【问题讨论】:
当您在内部范围内使用“外部”范围内的变量时,通常会发生阴影名称错误。这是一个可配置的 linting 选项,您可能希望禁用它,但我不确定为什么它会为您抛出,因为它似乎对我来说工作正常而且我没有禁用它。 【参考方案1】:基本上,Fenton 用他的例子很好地解释了这一点。 命名冲突时会出现阴影。
那么为什么不将嵌套变量/参数命名为 x 以外的名称呢? ;)
我的例子:
...
.retryWhen(error =>
return error
.mergeMap((error: any) =>
if (error.status === 500)
...
你看,很多error
参数。
【讨论】:
【参考方案2】:这是一个变量阴影的简单示例,以使警告清晰。
var x = 4;
function example()
var x = 5; // x is shadowing the outer scope's x variable
如果您声明一个接口的扩展(即Observable
的两个实例具有相同的公共根),从技术上讲,您并不是在隐藏,但如果您在多个级别上有一个Observable
,则可能不清楚你指的是哪个。
您可以使用以下选项关闭阴影警告:
"no-shadowed-variable": [
true,
"class": true,
"enum": true,
"function": true,
"interface": false,
"namespace": true,
"typeAlias": false,
"typeParameter": false
]
TypeScript 中的界面阴影是一个问题吗?
并非如此 - 你会发现接口被声明在函数中的情况,你也会发现这种情况,因为如果这是一个问题,TypeScript 编译器就会告诉你有问题...即成员列表将向您显示两个范围内的正确成员。
接口也被删除 - 因此不会出现编译后混淆,例如,如果有人在 javascript 程序中使用您的 TypeScript 库。
如果有人能提供一个界面阴影会导致问题的现实示例,我很乐意改变我的看法。
【讨论】:
我们(或至少大多数人)知道阴影是什么,如果他们不知道,他们可以在五秒钟内搜索“shadow tslint”。这里的问题是他为什么会收到警告。关闭它几乎是你能做的最糟糕的事情。 @torazaburo 我能想到更糟糕的事情。【参考方案3】:不知道这是如何解决的,但我重新安装了我的包依赖项,包括 tslint,现在我不再收到错误了。感谢您花时间提供帮助:)
【讨论】:
以上是关于tslint 错误阴影名称:'Observable'的主要内容,如果未能解决你的问题,请参考以下文章
Observable<Any> 触发 TSLint '属性不存在'