TypeScript
React Scheduler Pro is written in TypeScript and exports all types for full type safety.
All types are exported from the main package:
import {Scheduler,type SchedulerProps,type fieldsType,type view,type days,type DayHours,type onNavigateType,type onViewType,type onSlotType,type onClickEventType,type onDoubleClickEventType,type onEditEventType,type onDeleteEventType,type eventItemType,type eventFormContextType,type slotGetterType,type resourceType,} from 'react-scheduler-pro';
The main component props interface:
interface SchedulerProps {events: any[] | null;fields: fieldsType;// Optionalresources?: any[] | null;resourceFields?: { id: string; title: string; backgroundColor?: string };view?: view;views?: view[];selectedDate?: Date;schedulerHeight?: number;startHour?: DayHours;endHour?: DayHours;step?: number;hourFormat?: 12 | 24;locale?: Locale;timezone?: string;weekStartsOn?: days;message?: {today: string;month: string;week: string;day: string;workweek: string;more: string;};// Drag & Dropdraggable?: boolean;resizable?: boolean;onEventDrop?: (props: onEventDropType) => void;onEventResize?: (props: onEventResizeType) => void;// CallbacksonNavigate?: (props: onNavigateType) => void;onView?: (props: onViewType) => void;onSlot?: (props: onSlotType) => void;onClickEvent?: (props: onClickEventType) => void;onDoubleClickEvent?: (props: onDoubleClickEventType) => void;onEditEvent?: (props: onEditEventType) => void;onDeleteEvent?: (props: onDeleteEventType) => void;// TemplateseventTemplate?: (props: eventItemType) => JSX.Element | null;resourceTemplate?: (props: resourceType) => JSX.Element | null;eventPopoverTemplate?: (props: eventPopoverType) => JSX.Element | null;eventFormContext?: (props: eventFormContextType) => JSX.Element | null;slotPropGetter?: (props: slotGetterType) => {styles?: any;classnames?: string;};}
Maps your event object properties to what the scheduler expects:
type fieldsType = {id: string; // e.g. '_id'subject: string; // e.g. 'title'start: string; // e.g. 'startDate'end: string; // e.g. 'endDate'backgroundColor?: string;resourceId?: string;allDay?: string;};
type view = 'day' | 'week' | 'month' | 'workweek' | string;
type days = 0 | 1 | 2 | 3 | 4 | 5 | 6;
type DayHours = 0 | 1 | 2 | ... | 23 | 24;
type onNavigateType = { date: Date; start: Date; end: Date; view: view };type onViewType = { view: view };type onSlotType = { start: Date; end: Date; resource: any };type onClickEventType = { event: any; resource: any };type onDoubleClickEventType = { event: any; resource: any };type onEditEventType = { event: any; resource: any };type onDeleteEventType = { event: any; resource: any };type onEventDropType = {event: any;start: Date;end: Date;resource?: any;originalEvent: any;};type onEventResizeType = {event: any;start: Date;end: Date;originalEvent: any;};
// Define your event shapeinterface MyEvent {_id: string;title: string;startDate: Date;endDate: Date;color: string;roomId?: number;}const events: MyEvent[] = [{_id: '1',title: 'Team Meeting',startDate: new Date(2026, 2, 19, 10, 0),endDate: new Date(2026, 2, 19, 11, 0),color: '#0079ff',roomId: 1,},];// Map your fieldsconst fields: fieldsType = {id: '_id',subject: 'title',start: 'startDate',end: 'endDate',backgroundColor: 'color',resourceId: 'roomId',};<Scheduler events={events} fields={fields} />;