PassFront
  1. PassFront
  2. База знаний
  3. TypeScript в React

Как типизировать универсальный React-компонент с дженериком?

TypeScript в React

Универсальный компонент принимает пропсы с параметром типа, чтобы сохранить связь между данными и функциями, которые с ними работают.

Пример списка

interface ListProps<T> {
  items: T[];
  getKey: (item: T) => string;
  render: (item: T) => React.ReactNode;
}

function List<T>({ items, getKey, render }: ListProps<T>) {
  return <ul>{items.map((item) => <li key={getKey(item)}>{render(item)}</li>)}</ul>;
}

<List
  items={[{ id: 'a', name: 'Ann' }]}
  getKey={(u) => u.id}
  render={(u) => u.name}   // u выведен как { id: string; name: string }
/>

В файлах .tsx

Стрелочная функция с <T> путается с JSX; пишут <T,> или <T extends unknown>, либо используют обычную function.

Коротко для собеседования

Параметр типа компонента выводится из пропсов и связывает items с колбэками. В .tsx для стрелочных функций добавляют запятую: <T,>.

Другие вопросы раздела