tslint错误阴影名称:'Observable'

时间:2017-10-17 15:45:18

标签: angular typescript rxjs observable tslint

我在运行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错误?谢谢!

3 个答案:

答案 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,现在我不再收到错误了。感谢您抽出时间寻求帮助:)