我有一个 CalendarEvents 和一个名为 SelectedEvents 的继承子类。当访问CalendarEvents.selected属性时,将返回SelectedEvents实例。
我收到此错误:
CalendarEvents.ts:126 Uncaught TypeError: Class extends value undefined is not a constructor or null
这导致了get selected(): SelectedEvents
行。
我在Google搜索后遇到的错误很快就导致了循环依赖问题。我创建了一个index.ts文件,导出所有类和接口,希望可以解决问题:
// ./index.ts
export * from '../config';
export * from './classes/Blocker';
export * from './classes/CalendarEvent';
export * from './classes/CalendarEvents';
// no SelectedEvents because I tried putting it in the same file
export * from './classes/Selection';
export * from './classes/Slidedown';
export * from './interfaces/IcalendarEventHTMLElement';
export * from './interfaces/Idetail';
export * from './interfaces/IuncompletedRequest';
export * from './repeatWebRequest';
export * from '../config';
它没有即可。然后我想到将CalendarEvents和SelectedEvents放在同一个文件中,无济于事。
这是代码(请问我是否删除了重要的内容):
// ./classes/CalendarEvents.ts
import { CalendarEvent } from '..';
interface IcalendarEvents {
[index: string]: CalendarEvent;
}
export class CalendarEvents {
// no constructor class
public events: IcalendarEvents;
get calendarEvents(): CalendarEvent[] {
return Object.values(this.events);
}
// supposedly errors here:
get selected(): SelectedEvents {
return new SelectedEvents(
this.calendarEvents.filter((event: CalendarEvent) => {
return event.selected;
})
);
}
}
export class SelectedEvents extends CalendarEvents {
constructor(selectedEvents?: Set<CalendarEvent> | CalendarEvent[]) {
super();
for (const event of selectedEvents) {
this.events[event.eid] = event;
}
}
}
也许这通常是一个不好的设计。如果是这样,又将如何完成这样的事情?顺便说一句,这都是用Webpack编译的。
答案 0 :(得分:0)
我再次遇到了这个问题,这是我解决的方法:
检查index.ts中的进出口顺序。
之前:
export * from './classes/CalendarEvents';
export * from './classes/Events';
export * from './classes/SelectedEvents';
之后:
export * from './classes/Events';
export * from './classes/CalendarEvents';
export * from './classes/SelectedEvents';
Events
是CalendarEvents
和SelectedEvents
的抽象超类。