# Function: makeSyncTable()

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

Defined in: [api.ts:2582](https://github.com/coda/packs-sdk/blob/ff97ea86fa9d094c60a4770e333bac3f0e475e6e/api.ts#L2582)

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://docs.superhuman.com/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`>
