Невозможно установить свойство 'name' из неопределенного класса Typescript - PullRequest
0 голосов
/ 10 июня 2019

t.budget.budgetGroup.name здесь выше ошибка. Я не могу воссоздать эту ошибку. Но Sentry показывает это как исключение во время выполнения. Это возможно? Так как я инициализировал new Budget() и new BudgetGroup(). Так как я могу это исправить?

  data: DtoBudgetGroup;

  constructor(){}

  init() {
    this.data = this.navParams.get('data');
  }

let filteredTransactions: Transaction[] = filter(this.data.transactions, (t: 
Transaction) => { return t.budget.budgetGroup.name == this.data.budget.budgetGroup.name; });

export class Transaction {
    id: string;
    budget: Budget = new Budget();
  }

export class Budget {
    id: string;
    budgetGroup: BudgetGroup = new BudgetGroup();    
}

export class BudgetGroup {
    id: string;
    name: string;

}

export class DtoBudgetGroup {
    budget: Budget;
    budgetGroup: BudgetGroup;
    budgetTotal: number;
    transactionTotal: number;
    transactions: Transaction[];
    isTransactionOver: boolean = false;
}

this.data = this.navParams.get ('data');

enter image description here

1 Ответ

0 голосов
/ 10 июня 2019

Проблема в вашем коде заключается в том, что при вводе

class MyClass {

prop: stirng;

}

Вы объявляете только набор свойств и их тип.

Однако вы их не инициализируете. Для инициализации вам нужен конструктор.

У вас есть два способа объявить реквизит класса

export class BudgetGroup {
  constructor(
      public id?: string,
      public name?: string
    ) {
    }
}

и

export class BudgetGroup {
    id: string;
    name: string;

     constructor(
      id: string,
      name: string
    ) {
      this.id = id;
      this.name = name;
    }
}

Пример, который вы можете увидеть здесь


Нет инициализации проп, поэтому вызов new BudgetGroup приводит к пустому объекту. Чтобы инициализировать их, вы должны использовать либо конструктор, в котором вы передаете реквизиты, либо объявлять эти значения реквизитов прямо в классе.

Обновление. Специально для Randy Casburn

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...