Я пытаюсь определить класс в ecmascript 6.

Вот код:

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

   get context (){
      return this._context;
   }

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

Но я всегда получаю одну и ту же ошибку для установщика в Webstorm: «Метод метода доступа имеет тип, который не совместим с типом доступа get»

Я не понимаю, почему я получаю эту ошибку. Я сделал именно так, как описано здесь: http://es6-features.org/#GetterSetter

РЕДАКТИРОВАТЬ . Кажется, проблема существует только потому, что я определил свой класс на угловой фабрике.

Итак, мой вопрос: как правильно определить класс на угловой фабрике?

Может быть, я не должен делать это так.

РЕДАКТИРОВАТЬ 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;
  }
1
Guillaume Rahbari 22 Дек 2015 в 12:07

3 ответа

Лучший ответ

Ваш код ES6 (ES2015) правильный. Похоже на ошибку в WebStorm, связанную с новым синтаксисом (хотя слово «тип» удивительно, так как JavaScript набирается свободно; возможно, вы захотите проверить, не установлен ли он на TypeScript или аналогичный).

3
T.J. Crowder 22 Дек 2015 в 09:10

Я полагаю, 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;
   }   
}
4
Șerban Ghiță 21 Апр 2017 в 09:51

Это проблема с настройкой Webstorm. У вас есть линтер или что-то еще работает? Это язык автоопределения и по какой-то причине не выбирает JS?

Код в порядке.

0
Matt Styles 22 Дек 2015 в 09:12