我在运行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错误?谢谢!
答案 0 :(得分:20)
以下是变量阴影的快速示例,以使警告清晰。
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库。
如果有人可以提供一个关于界面阴影会导致问题的真实示例,我很乐意改变我的看法。
答案 1 :(得分:3)
基本上,Fenton很好地解释了他的例子。 命名冲突时会发生阴影。
那么为什么不将嵌套变量/参数命名为x而不是? ;)
我的例子:
...
.retryWhen(error => {
return error
.mergeMap((error: any) => {
if (error.status === 500) {
...
你看,很多error
个参数。
答案 2 :(得分:0)
不确定这是如何修复的,但我重新安装了我的包依赖项,包括tslint,现在我不再收到错误了。感谢您抽出时间寻求帮助:)