【问题标题】:TypeScript error: Reserved word 'this' used as nameTypeScript 错误:保留字“this”用作名称
【发布时间】:2016-07-05 18:22:26
【问题描述】:

我正在尝试让this Node.js TypeScript 定义工作,但 WebStorm 给了我一大串错误信息:

用作名称的保留字“this”。本次检查 报告任何使用 JavaScript 保留字作为名称的情况。 JavaScript 规范保留了一些词,它们是 目前不用作 JavaScript 关键字。使用这些词作为 如果更高版本的 JavaScript,标识符可能会导致代码损坏 将它们用作关键字。

由于返回类型而发生此错误的示例代码:

为什么this 关键字不能是类型?我可能使用的是旧的 TypeScript 编译器,还是输入错误?


编辑: 为了摆脱错误,我刚刚将所有这些 this 类型替换为包含类或接口的类型。例如,给定示例中的错误可以通过将其更改为以下内容来修复:

export interface EventEmitter {
    addListener(event: string, listener: Function): EventEmitter;
    ...
}

虽然,这不是解决实际问题的方法。

【问题讨论】:

  • 这看起来像是 WebStorm 中的一个错误。
  • 我认为 SLaks 是对的。它在 Atom 中对我来说很好用。

标签: javascript node.js typescript webstorm keyword


【解决方案1】:

以下代码在 typescript 操场上编译得很好:

export interface E
{
    b(): this;
}

class A implements E
{
    public b(): any
    {
        return 123;
    }   
}

let a = new A();
console.log(a.b());

根据link 'this' 将被解释为'any'。 所以很可能有一些与 webstorm 相关的东西。

【讨论】:

  • 这是一个polymorphic this。它不会被解释为any
  • 能否请您向我澄清一下。从逻辑上讲,我最初也认为这应该指向所有者类型。但是后来我在示例中实现接口时遇到了麻烦。如果我更改为 'public b(): E' 或 'public b(): A' 它不会编译。唯一有效的是“任何”。如何以正确的方式实现这样的接口?
  • 它对this scenario 有帮助。如果您明确输入,则应为:b(): this { ... }
【解决方案2】:

我是不是在使用旧的 TypeScript 编译器...?

是的,至少升级到 TS 1.7 以获得polymorphic this 支持。

【讨论】:

    【解决方案3】:

    看来您使用的是旧版本的 WebStorm。 WebStorm 从 v11.0.3 开始支持 'this' 类型。

    【讨论】:

      猜你喜欢
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      • 2015-08-31
      相关资源
      最近更新 更多