无法设置未定义Typescript类的属性“名称”

时间:2019-06-10 16:48:05

标签: javascript angular typescript ionic3

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 :(得分:-2)

代码中的问题是,当您键入

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;
    }
}

您可以看到here

的示例

没有属性初始化,因此调用new BudgetGroup将导致空对象。要初始化它们,您应该在传递道具的地方使用构造函数,或者在类中声明这些道具的值。

更新。特别是兰迪·卡斯本(Randy Casburn)

enter image description here