react Обощенный тип generic -- Пример для функционального компонента, коллбэк

Пример:

import React from 'react';


export interface ConfigAccordionProps<T> {
  name: string;
  setPanelOpen: (panelName: T, isOpen: boolean) => void;
}

const createItemName = (name: string, index: number) => `${name}-${index}`;

export function ConfigAccordion<T>({ name, setPanelOpen }: ConfigAccordionProps<T>) {
  const { t } = useTranslation();

// колбэк использует обобщенный тип
  const handleChange = (name: T) => (_event: React.ChangeEvent<{}>, isExpanded: boolean) => {
    setPanelOpen(name, isExpanded);
  };

  return (
    <>
      {configs.map(({ id, title, content }, index) => {
        const itemName = createItemName(name, index);
        const isExpanded = openedPanelsNames.includes(id);

        return (
          <AccordionItem
            id={id}
            name={itemName}
            title={t(title)}
            onChange={handleChange(id as unknown as T)}
            expanded={isExpanded}
            key={index}
          >
            {content}
          </AccordionItem>
        );
      })}
    </>
  );
}

Key Words for FKN + antitotal forum (CS VSU):