declare abstract class TimeSlot { startOfSlot: Date; endOfSlot: Date; constructor(startOfSlot: Date, endOfSlot: Date); abstract hasSameData(otherSlot: TimeSlot): boolean; } declare enum ElementType { START_TYPE = 0, END_TYPE = 1 } declare abstract class Builder { elements: BuilderElement[]; constructor(elements: BuilderElement[]); buildTimeline(): TimeSlot[]; abstract addDataFromElement(element: BuilderElement): void; abstract removeDataFromElement(element: BuilderElement): void; abstract getTimeSlot(startOfSlot: Date, endOfSlot: Date): TimeSlot; } declare class BuilderElement { elementDatetime: Date; elementType: ElementType; constructor(elementDatetime: Date, elementType: ElementType); static sortFunction(elementOne: BuilderElement, elementTwo: BuilderElement): number; } export { TimeSlot, Builder, BuilderElement, ElementType };