react-table och TypeScript: hur fungerar anpassade egenskaper på kolumner?
Jag bygger en tabell med react-table, men TypeScript klagar på de egenskaper jag har lagt till i columns. Mina columns är uppsatta på följande sätt:
const columns = useMemo(
() => [
{
Header: 'Name',
accessor: 'name',
className: '[some classes here]',
isSortable: true,
},
...
och jag återger tabellen så här:
<tr {...headerGroup.getHeaderGroupProps()}>
{headerGroup.headers.map(column => {
const getHeaderPropsArgs = [{ className: column.className }];
if (column.isSortable) getHeaderPropsArgs.push(column.getSortByToggleProps());
return (
<th {...column.getHeaderProps(getHeaderPropsArgs)}>
<div>
{column.render('Header')}
{column.isSortable ? <SortIcon isSorted={column.isSorted} isSortedDesc={column.isSortedDesc} /> : null}
</div>
</th>
);
Med andra ord, vissa av mina kolumner kan sorteras, och för de kolumnerna renderar jag en anpassad SortIcon-komponent i rubriken. Vissa av kolumnerna har klasser kopplade till sig, och jag lägger till dem i getHeaderProps tillsammans med instruktionen att göra kolumnen sorteringsbar eller inte.
TypeScript klagar på dessa två egenskaper som jag har lagt till i columns:
Property 'className' does not exist on type 'ColumnInstance<object>'.
Property 'isSortable' does not exist on type 'ColumnInstance<object>'.
Finns det ett bra sätt att lägga till dessa typer? Eller närmar jag mig detta på fel sätt?
Svar #1
Jag använde inte det inbyggda stödet för sorteringsbara kolumner. Istället för att lägga till en egen isSortable-egenskap, använd disableSortBy: true. För klasserna fungerade denna enklare version:
return (
<th
{...column.getHeaderProps([
{ className: column.className },
column.getSortByToggleProps(),
])}
>
