gpt4 book ai didi

javascript - 转换后无法访问对象方法

转载 作者:行者123 更新时间:2023-12-01 02:26:55 25 4
gpt4 key购买 nike

我正在尝试访问模型方法的一些对象,但不断收到错误消息,表明没有这样的函数。

这是我编写的模型类:

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)由于访问冲突(私有(private)),它将引发错误

我做错了什么?

谢谢

最佳答案

as Expense[] 只是一个类型提示,告诉 Typescript expenses.data 实际上是一个 Expense 数组 对象,不管 Typescript 可能推断出什么。但是,好吧,它们不是Expense对象,它们只是普通对象(或者我是这么认为的)。您将需要实际循环数据并从中创建新的 Expense 对象,使它们成为 Expense 对象,该对象将具有 getDate 方法.

but if i will try to print the date (this.expensesList[0].date) it will throw an errordue to access violation (private)

是的,因为您已经让静态类型检查器相信您正在尝试访问 Expense 对象的属性(无论这实际上是否正确)。

这就是为什么你应该谨慎使用as,并且只有当你真正知道自己在做什么时才使用;它可以阻止类型检查器完成其工作,并且这些问题只会在运行时出现,而不会在编译时被发现。

关于javascript - 转换后无法访问对象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48706023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com