[英]Sanitizing a field in an Angular subscribed array when its a optional field in the interface to avoid Overload error
从 Django API 清理数据时出现过载错误。 event.start
没有问题,但event.end
了。
这是我的订阅实现:
public getEvents() {
this.apiService.getEvent()
.subscribe(
(data: any) => {
this.events = data;
for (let event of this.events) {
event.start = new Date(event.start);
event.end = new Date(event.end);
}
},
err => console.error(err),
() => console.log('done loading events')
);
}
这是我正在使用的 angular-calendar 包中定义的接口:
export interface CalendarEvent<MetaType = any> {
id?: string | number;
start: Date;
end?: Date;
title: string;
color?: EventColor;
actions?: EventAction[];
allDay?: boolean;
cssClass?: string;
resizable?: {
beforeStart?: boolean;
afterEnd?: boolean;
};
draggable?: boolean;
meta?: MetaType;
}
这是具体的错误信息。
TS2769: No overload matches this call.
Overload 1 of 4, '(value: string | number | Date): Date', gave the following error.
Argument of type 'Date | undefined' is not assignable to parameter of type 'string | number | Date'.
Type 'undefined' is not assignable to type 'string | number | Date'.
Overload 2 of 4, '(value: string | number): Date', gave the following error.
Argument of type 'Date | undefined' is not assignable to parameter of type 'string | number'.
Type 'undefined' is not assignable to type 'string | number'.
我还尝试更改接口定义以省略“?” end 字段的可选分配,但由于与组件中的这些代码行冲突,导致我的ng build
出错。
eventTimesChanged({
event,
newStart,
newEnd,
}: CalendarEventTimesChangedEvent): void {
this.events = this.events.map((iEvent) => {
if (iEvent === event) {
return {
...event,
start: newStart,
end: newEnd,
};
}
return iEvent;
});
this.handleEvent('Dropped or resized', event);
}
我不清楚 iEvent 变量的来源。
尝试更改 CalendarEvents 界面中的类型。 错误消息告诉您,某些类型与来自 DJANGO API 的数据不兼容。 在某些情况下,您会得到undefined 。 出于测试目的,您可以尝试:
id?: string | number | undefined;
start: Date | undefined;
end?: Date | undefined;
问题的症结在于CalendarEventTimesChangedEvent
接口。 newEnd
是可选的,必须将其与CalendarEvent
中的end
一起更改为必需。
运行ng build
时给出了问题的线索。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.