конструктор typescript не позволит мне ничего определять

#angular #typescript #ionic-framework #ionic2

#angular #typescript #ионный фреймворк #ionic2

Вопрос:

Я пытаюсь написать базовый класс на typescript, используя ionic 2. Вот мой код:

 import { Component } from '@angular/core';

import { NavController } from 'ionic-angular';

import {FishPage} from '../fish';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

  constructor(public navCtrl: NavController) {
    this.salary = 7;
  }

}
  

Typescript не компилируется. Я получаю эту ошибку:

ошибка TS2339: свойство ‘зарплата’ не существует для типа ‘Домашняя страница’.

Как мне определить зарплату в конструкторе?

Комментарии:

1. Попробуйте объявить его вне конструктора, прежде чем присваивать ему значение внутри конструктора. salary:number; constructor(public navCtrl: NavController){ this.salary = 7;}

2. объявите эту переменную. что-то вроде этого: salay:number

Ответ №1:

Член класса должен быть определен либо в подписи конструктора с использованием public / protected / private (как вы сделали с navCtrl участником), либо следующим образом:

 export class HomePage {
    private salary: number;

    constructor(public navCtrl: NavController) { ... }
}
  

Ionic — это не библиотека typescript, а библиотека javascript, поэтому их документация — javascript, а не typescript.
С помощью javascript (при использовании классов es6) вам не нужно объявлять члены, как вам нужно в typescript.

Когда код typescript в моем ответе компилируется в javascript, он выглядит так:

 var HomePage = (function () {
    function HomePage(navCtrl) {
        this.navCtrl = navCtrl;
    }
    return HomePage;
}());
  

Как вы можете видеть, здесь тоже нет никаких следов public / private или объявления членов, это просто typescript, и это было там (вероятно) из первой версии.

Комментарии:

1. Это новая функция type script? этого нет ни в одной документации ionic 2, т.е. ionicframework.com/docs/v2/api/components/nav/NavPush они вообще этого не делают. Как это будет работать для компонента?

2. Проверьте мой пересмотренный ответ

Ответ №2:

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

 export class HomePage {
  salary: number;
  constructor(navCtrl: NavController) {
    this.salary = 7;
  }
}
  

Примечание: нет необходимости использовать public ключевое слово для объявления общедоступных членов.

используйте private salary: number; , чтобы сделать его закрытым.

Для инициализации со значением по умолчанию используйте salary: number = 10;