Инициализация объекта в angular2

У меня есть объектpayment, который инициализируется после успешного http-вызова, в ответ он получает ключ account, поэтому для объявления объекта оплаты я объявляю как public payment = {}(в настоящее время у этого нет этого accountключа). Я использую accountв различных функциях и так как во время компиляции оплата пустая объект webpack дает мне эту ошибку Property 'account' does not exist on type '{}'.. Но если я инициализирую объект оплаты, поскольку public payment = {account: ""}эта ошибка уходит, но это, я думаю, не является правильным способом, так как я могу предотвратить эту проблему.

3 ответа

  1. Создание Paymentтипа:

    class Payment {
        account: string // or whatever
    }
    

    И инициализировать так:

    public payment: Payment = new Payment();
    

    Это не обязательно-компилятор typescript прекрасно компилирует существующий код. Но организация приложения окупается за счет завершения кода и лучшей проверки типа по мере роста приложения.

  2. Думаю, лучше всего начать работать с объектами… у вас должен быть тип javascript под названием Payment, который можно создать без данных со всеми ожидаемыми свойствами.

    Тогда при инициализации основного объекта, у вас будет что-то вроде :

    function Payment() {
      var self = this;
      self.Account = null;
    }
    function MyController() {
      var self = this;
      self.payment = new Payment();
    }
    

    Сначала это может показаться ненужным, но эти объекты становятся очень полезными, когда приложение становится более сложным, потому что это дает вам место для размещения функций и других производных свойств, которые вам понадобятся в долгосрочной перспективе.

  3. объект необходимо инициализировать в конструкторе, если вы хотите использовать в нескольких методах.

    найдите ниже код для вашей справки.

    Деталь.цезий

    import { Component, ElementRef, ViewChild } from '@angular/core';
    import { Router } from '@angular/router';
    
    @Component({
        moduleId: module.id,
        selector: 'MyPage',
        templateUrl: 'mypage.component.html'
    })
    
    export class MyPageComponent {    
        public account: Account;
    
        constructor(private router: Router) {
            this.account = new Account();
        }
    }
    

    спасибо.