[API reference](https://evolu.dev/docs/api-reference) › [@evolu/common](https://evolu.dev/docs/api-reference/common) › [Function](https://evolu.dev/docs/api-reference/common/Function) › Thunk

```ts
type Thunk<T> = () => T;
```

Defined in: [packages/common/src/Function.ts:241](https://github.com/evoluhq/evolu/blob/ca15b4661c40fedb9f47434497086039cbdea38e/packages/common/src/Function.ts#L241)

A function that takes no arguments and returns a value.

Useful for:

- Providing default callbacks (see [constVoid](https://evolu.dev/docs/api-reference/common/Function/variables/constVoid), [constTrue](https://evolu.dev/docs/api-reference/common/Function/variables/constTrue), etc.)
- Delaying expensive operations until actually needed
- Deferring side effects so the callee controls when they run

### Example

```ts

const notify = (onDone: Thunk<void> = constVoid) => onDone();
notify();

let value = 0;
const compute: Thunk<number> = () => ++value;
const jobs: Array<Thunk<void>> = [];
const schedule = (job: Thunk<void>): void => {
  jobs.push(job);
};
schedule(() => {
  value += 10;
});

const computed = compute();
jobs.shift()?.();
expect(computed).toBe(1);
expect(value).toBe(11);
```