@tanstack/table-core
Version:
Headless UI for building powerful tables & datagrids for TS/JS.
69 lines • 3.4 kB
TypeScript
import { DeepKeys, DeepValue, RowData } from "../types/type-utils.js";
import { AccessorFn, AccessorFnColumnDef, AccessorKeyColumnDef, ColumnDef, DisplayColumnDef, GroupColumnDef, IdentifiedColumnDef } from "../types/ColumnDef.js";
import { TableFeatures } from "../types/TableFeatures.js";
//#region src/helpers/columnHelper.d.ts
interface ColumnHelper<in out TFeatures extends TableFeatures, in out TData extends RowData> {
/**
* Creates a data column definition with an accessor key or function to extract the cell value.
* @example
* ```ts
* helper.accessor('firstName', { cell: (info) => info.getValue() })
* helper.accessor((row) => row.lastName, { id: 'lastName' })
* ```
*/
accessor: <TAccessor extends AccessorFn<TData> | DeepKeys<TData>, TValue extends (TAccessor extends AccessorFn<TData, infer TReturn> ? TReturn : TAccessor extends DeepKeys<TData> ? DeepValue<TData, TAccessor> : never)>(accessor: TAccessor, column: TAccessor extends AccessorFn<TData> ? DisplayColumnDef<TFeatures, TData, TValue> : IdentifiedColumnDef<TFeatures, TData, TValue>) => TAccessor extends AccessorFn<TData> ? AccessorFnColumnDef<TFeatures, TData, TValue> : AccessorKeyColumnDef<TFeatures, TData, TValue>;
/**
* Wraps an array of column definitions to preserve each column's individual TValue type.
* Uses variadic tuple types to infer element types before checking constraints, preventing type widening.
* @example
* ```ts
* helper.columns([helper.accessor('firstName', {}), helper.accessor('age', {})])
* ```
*/
columns: <TColumns extends ReadonlyArray<ColumnDef<TFeatures, TData, any>>>(columns: [...TColumns]) => Array<ColumnDef<TFeatures, TData, any>> & [...TColumns];
/**
* Creates a display column definition for non-data columns like actions or row selection.
* @example
* ```ts
* helper.display({ id: 'actions', header: 'Actions', cell: () => <button>Edit</button> })
* ```
*/
display: (column: DisplayColumnDef<TFeatures, TData>) => DisplayColumnDef<TFeatures, TData, unknown>;
/**
* Creates a group column definition that contains nested child columns.
* @example
* ```ts
* helper.group({
* id: 'name',
* header: 'Name',
* columns: helper.columns([
* helper.accessor('firstName', {}),
* helper.accessor('lastName', { id: 'lastName' }),
* ]),
* })
* ```
*/
group: (column: GroupColumnDef<TFeatures, TData, unknown>) => GroupColumnDef<TFeatures, TData, unknown>;
}
/**
* Creates helper functions for authoring column definitions with stronger value
* inference.
*
* `accessor` infers `TValue` from an accessor key or accessor function,
* `display` creates non-data columns, `group` creates parent columns, and
* `columns` preserves tuple-level value types for arrays. At runtime these
* helpers only return column definition objects.
*
* @example
* ```tsx
* const helper = createColumnHelper<typeof features, Person>() // features is the result of `tableFeatures({})` helper
* const columns = [
* helper.display({ id: 'actions', header: 'Actions' }),
* helper.accessor('firstName', {}),
* helper.accessor((row) => row.lastName, { id: 'lastName' }),
* ]
* ```
*/
declare function createColumnHelper<TFeatures extends TableFeatures, TData extends RowData>(): ColumnHelper<TFeatures, TData>;
//#endregion
export { ColumnHelper, createColumnHelper };