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 '属性不存在'

理解“无阴影变量”的 tslint 警告

rxjs Observable 导入问题

在 Typescript 中带有 Observable 的 XMLHttpRequest

tslint 正确的错误/警告处理

tslint 更新错误“找不到模块 'tslint/lib/lint'”