# TableFeature

# Interface: TableFeature

Defined in: [types/TableFeatures.ts:308](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L308)

Lifecycle hooks and defaults contributed by a table feature.

Feature objects are registered in the table's `features` option. They can
contribute default state/options, default column definitions, table APIs,
shared prototype APIs for rows/columns/headers/cells, and per-instance row
or column data.

## Properties

### assignCellPrototype()?

```ts
optional assignCellPrototype: <TFeatures, TData>(prototype, table) => void;
```

Defined in: [types/TableFeatures.ts:317](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L317)

Adds feature methods to the shared cell prototype for a table.

This runs lazily the first time a cell is constructed for a table. Methods
assigned here are shared by every cell instance created by that table, so
this hook should be used for APIs and memoized methods rather than
per-cell mutable data.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### prototype

`Record`\<`string`, `any`\>

##### table

[`Table_Internal`](Table_Internal.md)\<`TFeatures`, `TData`\>

#### Returns

`void`

***

### assignColumnPrototype()?

```ts
optional assignColumnPrototype: <TFeatures, TData>(prototype, table) => void;
```

Defined in: [types/TableFeatures.ts:332](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L332)

Adds feature methods to the shared column prototype for a table.

This runs lazily the first time a column is constructed for a table.
Methods assigned here are shared by every column instance created by that
table, so this hook should be used for APIs and memoized methods rather
than per-column mutable data.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### prototype

`Record`\<`string`, `any`\>

##### table

[`Table_Internal`](Table_Internal.md)\<`TFeatures`, `TData`\>

#### Returns

`void`

***

### assignHeaderPrototype()?

```ts
optional assignHeaderPrototype: <TFeatures, TData>(prototype, table) => void;
```

Defined in: [types/TableFeatures.ts:347](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L347)

Adds feature methods to the shared header prototype for a table.

This runs lazily the first time a header is constructed for a table.
Methods assigned here are shared by every header instance created by that
table, so this hook should be used for APIs and memoized methods rather
than per-header mutable data.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### prototype

`Record`\<`string`, `any`\>

##### table

[`Table_Internal`](Table_Internal.md)\<`TFeatures`, `TData`\>

#### Returns

`void`

***

### assignRowPrototype()?

```ts
optional assignRowPrototype: <TFeatures, TData>(prototype, table) => void;
```

Defined in: [types/TableFeatures.ts:362](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L362)

Adds feature methods to the shared row prototype for a table.

This runs lazily the first time a row is constructed for a table. Methods
assigned here are shared by every row instance created by that table, so
this hook should be used for APIs and memoized methods rather than per-row
mutable data.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### prototype

`Record`\<`string`, `any`\>

##### table

[`Table_Internal`](Table_Internal.md)\<`TFeatures`, `TData`\>

#### Returns

`void`

***

### constructTableAPIs()?

```ts
optional constructTableAPIs: <TFeatures, TData>(table) => void;
```

Defined in: [types/TableFeatures.ts:374](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L374)

Adds feature APIs directly to the table instance.

The table is a singleton, unlike rows, columns, headers, and cells, so
table APIs are assigned directly instead of through a shared prototype.
This runs while the table is being constructed, after options and initial
state have been resolved.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### table

[`Table_Internal`](Table_Internal.md)\<`TFeatures`, `TData`\>

#### Returns

`void`

***

### getDefaultColumnDef()?

```ts
optional getDefaultColumnDef: <TFeatures, TData, TValue>() => ColumnDefBase_All<TFeatures, TData, TValue>;
```

Defined in: [types/TableFeatures.ts:384](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L384)

Returns default column definition options contributed by this feature.

These defaults are merged into the table's default column definition before
`options.defaultColumn` and before each user-supplied column definition is
resolved, so users can override values supplied here.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

##### TValue

`TValue` *extends* `unknown` = `unknown`

#### Returns

[`ColumnDefBase_All`](../type-aliases/ColumnDefBase_All.md)\<`TFeatures`, `TData`, `TValue`\>

***

### getDefaultTableOptions()?

```ts
optional getDefaultTableOptions: <TFeatures, TData>(table) => Partial<TableOptions_All<TFeatures, TData>>;
```

Defined in: [types/TableFeatures.ts:397](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L397)

Returns default table options contributed by this feature.

This runs while table options are being resolved. Use it for option
defaults such as feature enablement flags and default state-updater
callbacks. User-supplied table options take precedence over values returned
here.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### table

[`Table_Internal`](Table_Internal.md)\<`TFeatures`, `TData`\>

#### Returns

`Partial`\<[`TableOptions_All`](../type-aliases/TableOptions_All.md)\<`TFeatures`, `TData`\>\>

***

### getInitialState()?

```ts
optional getInitialState: (initialState) => TableState_All;
```

Defined in: [types/TableFeatures.ts:411](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L411)

Returns this feature's initial table state.

The incoming `initialState` contains state accumulated from earlier
features and user-provided initial state. Return a complete state object
for this feature, preserving `initialState` so user-provided values can
override feature defaults.

#### Parameters

##### initialState

`Partial`\<[`TableState_All`](TableState_All.md)\>

#### Returns

[`TableState_All`](TableState_All.md)

***

### initColumnInstanceData()?

```ts
optional initColumnInstanceData: <TFeatures, TData, TValue>(column) => void;
```

Defined in: [types/TableFeatures.ts:420](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L420)

Initializes instance-specific data on each column.

This runs for every constructed column after core column fields such as
`id`, `depth`, `parent`, `columnDef`, and `columns` have been assigned.
Use this for per-column mutable data, caches, or annotations. Shared
methods should be assigned via `assignColumnPrototype` instead.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

##### TValue

`TValue` *extends* `unknown` = `unknown`

#### Parameters

##### column

[`Column`](../type-aliases/Column.md)\<`TFeatures`, `TData`, `TValue`\>

#### Returns

`void`

***

### initRowInstanceData()?

```ts
optional initRowInstanceData: <TFeatures, TData>(row) => void;
```

Defined in: [types/TableFeatures.ts:435](https://github.com/TanStack/table/blob/main/packages/table-core/src/types/TableFeatures.ts#L435)

Initializes instance-specific data on each row.

This runs for every constructed row after core row fields such as `id`,
`index`, `depth`, `original`, `parentId`, and `subRows` have been assigned.
Use this for per-row mutable data, caches, or annotations. Shared methods
should be assigned via `assignRowPrototype` instead.

#### Type Parameters

##### TFeatures

`TFeatures` *extends* [`TableFeatures`](TableFeatures.md)

##### TData

`TData` *extends* [`RowData`](../type-aliases/RowData.md)

#### Parameters

##### row

[`Row`](../type-aliases/Row.md)\<`TFeatures`, `TData`\>

#### Returns

`void`
