У меня есть CalendarEvents и дочерний унаследованный класс с именем SelectedEvents .Экземпляр SelectedEvents возвращается при обращении к свойству CalendarEvents.selected.
Я получаю эту ошибку:
CalendarEvents.ts:126 Uncaught TypeError: Class extends value undefined is not a constructor or null
Это приводит к строке get selected(): SelectedEvents
.
Ошибка, которую я получил, когда Googled быстро привел меня к проблеме циклической зависимости.Я создал файл 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.