【问题标题】:Error when defining a setter in ecmascript 6在 ecmascript 6 中定义设置器时出错
【发布时间】:2015-12-22 09:07:50
【问题描述】:

我正在尝试在 ecmascript 6 中定义一个类。

代码如下:

class Machine {
   constructor (){
      this._context = null;
   }

   get context (){
      return this._context;
   }

   set context (context){
      this._context = context;
   }   
}

但是对于 Webstorm 中的设置器,我总是遇到同样的错误: “设置访问器方法的类型与获取访问器类型不兼容”

我不明白为什么会出现此错误。我完全按照这里的解释做了:http://es6-features.org/#GetterSetter

编辑:似乎问题只是因为我在 Angular 工厂中定义了我的类。

所以我的问题是如何在 Angular 工厂中正确定义一个类?

也许我不应该那样做。

编辑 2:这是我的角度工厂:

angular.module('frontEndApp')
  .factory('Machine', function () {

     class Machine {
        constructor (){
           this._context = null;
        }

        get context (){
           return this._context;
        }

        set context (context){
           this._context = context;
        }   
     }

     return Machine;
  }

【问题讨论】:

  • 什么版本的 WebStorm? WebStorm 11 对我来说很好。
  • 这里版本相同,没有错误。确保您的项目是set up to use ECMAScript 6 syntax
  • 我发现如果我的类是在角度服务中定义的,我只会收到错误消息。不知道如何在角度服务中正确定义类
  • 问题在于您的 webstorm 设置。它与角度或JS无关。您的类声明很好,并且可以将其作为服务的实例返回。您的 webstorm 设置中的某些内容不理解您的代码,这使您对它作为工具的信心为零,因为您的代码很好。
  • @GuillaumeRahbari:您的编辑完全改变了问题(并且您可能应该修复语法错误)。一旦有答案就完全改变问题通常是不受欢迎的。

标签: javascript angularjs class ecmascript-6 webstorm


【解决方案1】:

我猜WebStorm无法确定属性this._context的类型 您可能想要注释您的代码以帮助 WebStorm(我遇到了同样的问题):

class Machine {
   constructor (){
      this._context = null;
   }

  /**
   * Proxy method for getting context.
   *
   * @return {ContextInterface}
   */
   get context (){
      return this._context;
   }

   /**
    * Sets the appropriate context.
    *
    * @param {ContextInterface} context
    */
   set context (context){
      this._context = context;
   }   
}

【讨论】:

  • 我认为这应该是公认的答案。我在 WebStorm 上遇到了这个问题,并设置了没有冒犯性的编辑器检查。我还必须使用 jsdoc 样式的 cmets 来键入 get/set 方法,并确保这些类型是兼容的。
【解决方案2】:

您的 ES6 (ES2015) 代码是正确的。听起来像是 WebStorm 中围绕新语法的一个错误(尽管“类型”这个词令人惊讶,因为 JavaScript 的类型很松散;您可能需要检查是否将其设置为 TypeScript 或类似的)。

【讨论】:

  • 好像没有,打字稿被禁用,javascript被设置为ECMAScript6
  • 我刚刚在 PhpStorm 中遇到了这个问题。有问题的设置是 Editor > Inspections > JavaScript > General 中的 JavaScript 一般错误
【解决方案3】:

这是您的 Webstorm 设置的问题。你有一个 linter 或其他东西在运行吗?它是自动检测语言并且由于某种原因没有选择 JS 吗?

代码没问题。

【讨论】:

  • 看来我没有 linter,我禁用了所有对 javascript 的检查,但我仍然收到错误。
猜你喜欢
  • 2016-10-18
  • 2015-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
相关资源
最近更新 更多