Синтаксическая ошибка Ionic 2 при компиляции TypeScript

Следуя инструкциям здесь, я дошел до синтаксической ошибки. при компиляции моего машинописного кода.

Вот ошибка:

/app/pages/list/list.js Ошибка сборки модуля: SyntaxError: /focus/projects/ionic-todo/app/pages/list/list.js: Неожиданный токен (10:17) 8 | 9 | экспорт класса ListPage {

10 | конструктор (nav: NavController) { | ^ 11 | this.nav = навигация; 12 | 13 | это.элементы = [

Как видите, кажется, что с толстой кишкой что-то не так. Однако, если вы удалите двоеточие, вы получите аналогичную ошибку вместо пробела.

Вот полный код:

import {Page, NavController} from 'ionic-angular';
import {AddItemPage} from '../add-item/add-item';


@Page({
  templateUrl: 'build/pages/list/list.html'
})

export class ListPage {
  constructor(nav: NavController){
    this.nav = nav;

    this.items = [
      {'title': 'hi', 'description': 'hello'},
      {'title': 'sadf', 'description': 'asdfasdf'},
      {'title': 'asd', 'description': 'asdf'}
    ];
  }

  addItem()
  {
    this.nav.push(AddItemPage, {ListPage: this});
  }
}

Любые идеи, что может быть причиной этого?


person Jeffrey Lemay    schedule 07.03.2016    source источник
comment
У вас есть эта ошибка при загрузке вашего модуля? Я имею в виду при выполнении вашего кода...   -  person Thierry Templier    schedule 07.03.2016


Ответы (2)


Ваша ошибка наводит меня на мысль, что вы пытаетесь напрямую выполнить свой код TypeScript, не компилируя (предварительно обрабатывая) или транспилируя его на лету.

Я думаю, что ваш код должен быть только ES6. Фактически, с ES6 у вас есть поддержка классов, но не поддержка типов (например, в конструкторе/методе).

Я просмотрел шаблоны генераторов Ionic2, и они, кажется, ES6. См. эту ссылку:

Вы можете адаптировать свой код следующим образом:

import {Page, NavController} from 'ionic-angular';
import {AddItemPage} from '../add-item/add-item';


@Page({
  templateUrl: 'build/pages/list/list.html'
})

export class ListPage {
  static get parameters() {
    return [[NavController]];
  }

  constructor(nav){
    this.nav = nav;

    this.items = [
      {'title': 'hi', 'description': 'hello'},
      {'title': 'sadf', 'description': 'asdfasdf'},
      {'title': 'asd', 'description': 'asdf'}
    ];
  }

  addItem()
  {
    this.nav.push(AddItemPage, {ListPage: this});
  }
}
person Thierry Templier    schedule 07.03.2016
comment
Ты абсолютно прав. Боюсь, я до сих пор не понимаю, почему это сработало для человека в учебнике, но я просто счастлив, что нашел решение. - person Jeffrey Lemay; 08.03.2016
comment
Есть ли лучший способ решить эту проблему, чем изменение кода? Предоставленная ссылка не является действительно объяснительной. - person eMarine; 07.06.2016

Когда вы пишете в файле .js, вам нужно будет указать статический блок, т.е.

static get parameters() {
    return [[NavController]];
  }

чтобы получить тип nav, который находится внутри параметра конструктора.

но в файле .ts вам не нужно определять статический блок, вы можете просто определить его внутри конструктора, например:

constructor (nav : NavController) {}

вы можете думать об этом как о nav как о переменной, а NavController как о типе.

Это причина, по которой вы получали ошибку. Вы использовали синтаксис машинописного текста (.ts) в файле javascript (.js).

Так что в следующий раз, когда будете смотреть туториал, попробуйте посмотреть, работает ли репетитор с файлом .js или с файлом .ts :-)

Надеюсь, поможет.

person im_bhatman    schedule 12.05.2016