Grouping elements by months in Typescript
Dec 3, 2022Arkar Kaung Myat
Typescript
Typechecking a grouping function
export type Months =
  | "January"
  | "February"
  | "March"
  | "April"
  | "May"
  | "June"
  | "July"
  | "August"
  | "September"
  | "October"
  | "November"
  | "December";
export type accType<T extends { releasedAt: string }> = {
  [key in Months]: T[];
};
function groupByMonth<T extends { releasedAt: string }>(articles: T[]) {
  let grouped = articles.reduce((acc: accType<T>, article) => {
    const month = dateFormat(article.releasedAt, "mmmm") as Months;
    acc[month] = [...(acc[month] || []), article];
    return acc;
  }, {} as accType<T>);
  return grouped;
}
export default groupByMonth;