我正在尝试访问模型方法的某些对象,但一直收到错误,表示没有这样的函数。
这是我写的模型类:
class Expense {
private name: string;
private title: string;
private amount: number;
private description: string;
private date: Date;
private status: string;
public formatetdDate: string;
private _id : string;
constructor(name: string, title: string, amount: number, description: string, date: Date, status: string) {
this.name = name;
this.title = title;
this.amount = amount;
this.description = description;
this.date = new Date(0);
this.status = status;
this.formatetdDate = this.dateFormat();
}
public getDate(): Date {
return this.date;
}
public dateFormat(): string {
let dd = this.date.getDate();
let mm = this.date.getMonth() + 1;
const yyyy = this.date.getFullYear();
if (dd < 10) {
dd = +`0${dd}`;
}
if (mm < 10) {
mm = +`0${mm}`;
}
console.log(dd + '/' + mm + '/' + yyyy);
return dd + '/' + mm + '/' + yyyy;
}
}
export default Expense;
现在我正在使用http调用从服务器检索数据并将其转换为此模型:
this.expenseService.getExpensesList().subscribe((expenses) => {
if (expenses.success) {
this.expensesList = expenses.data as Expense[];
this.total = +expenses.total;
this.pages = +expenses.pages;
this.limit = +expenses.limit;
} else {
alert(expenses.message);
}
});
如果生病了尝试做以下行动:
this.expensesList[0].getData()
或
this.expensesList[0].dateFormat()
它总是抛出那些没有功能的错误。 但如果我将尝试打印日期(this.expensesList [0] .date) 它会抛出错误的访问违规(私人)
我做错了什么?
由于
答案 0 :(得分:2)
as Expense[]
只是一个类型的提示,告诉Typescript expenses.data
实际上是一个Expense
对象的数组,尽管其他的Typescript可能推断出来。但是,它们是不是 Expense
个对象,它们仅仅是普通对象(或者我认为是这样)。您需要实际循环遍历数据并从中创建new Expense
个对象,以使它们成为Expense
个对象,这些对象将具有getDate
方法。
但是,如果我将尝试打印日期(
this.expensesList[0].date
),它将引发违规访问(私人)
是的,因为您已经确信静态类型检查器是您尝试访问Expense
对象的属性(无论这是否真实)。
这就是为什么你应该谨慎使用as
,只有当你真正知道自己在做什么时才这样做;它可以防止类型检查器完成它的工作,这些问题只会在运行时浮出水面而不会在编译时被捕获。