# Function: makeSyncTable()

> **makeSyncTable**\<`K`, `L`, `ParamDefsT`, `SchemaDefT`, `SchemaT`, `ContextT`, `PermissionsContextT`>(`__namedParameters`): [`SyncTableDef`](../../interfaces/SyncTableDef/)\<`K`, `L`, `ParamDefsT`, `SchemaT`, `ContextT`, `PermissionsContextT`>

Defined in: [api.ts:2566](https://github.com/coda/packs-sdk/blob/b2b4c9dba5ca748bdbb94481cc13b5ca3c328ef6/api.ts#L2566)

Wrapper to produce a sync table definition. All (non-dynamic) sync tables should be created using this wrapper rather than declaring a sync table definition object directly.

This wrapper does a variety of helpful things, including * Doing basic validation of the provided definition. * Normalizing the schema definition to conform to recommended syntax. * Wrapping the execute formula to normalize return values to match the normalized schema.

See [Normalization](https://head.coda.io/packs/build/latest/guides/advanced/schemas/#normalization) for more information about schema normalization.

## Type Parameters

| Type Parameter | | --- | | `K` *extends* `string` | | `L` *extends* `string` | | `ParamDefsT` *extends* [`ParamDefs`](../../type-aliases/ParamDefs/) | | `SchemaDefT` *extends* [`ObjectSchemaDefinition`](../../interfaces/ObjectSchemaDefinition/)\<`K`, `L`> | | `SchemaT` *extends* [`ObjectSchemaDefinition`](../../interfaces/ObjectSchemaDefinition/)\<`K`, `L`> & `object` | | `ContextT` *extends* [`SyncExecutionContext`](../../interfaces/SyncExecutionContext/)\<`any`, `any`, `any`> | | `PermissionsContextT` *extends* `SyncPassthroughData` |

## Parameters

| Parameter | Type | | --- | --- | | `__namedParameters` | [`SyncTableOptions`](../../interfaces/SyncTableOptions/)\<`K`, `L`, `ParamDefsT`, `SchemaDefT`, `ContextT`, `PermissionsContextT`> |

## Returns

[`SyncTableDef`](../../interfaces/SyncTableDef/)\<`K`, `L`, `ParamDefsT`, `SchemaT`, `ContextT`, `PermissionsContextT`>
