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

Defined in: [packages/common/src/Type.ts:8882](https://github.com/evoluhq/evolu/blob/a18269a1b822c670b507c6a9b73b23eed32551fe/packages/common/src/Type.ts#L8882)

A structurally tagged value created by [typed](https://evolu.dev/docs/api-reference/common/Type/functions/typed).

Typed unions model mutually exclusive states as separate variants instead of
combinations of flags and optional properties. TypeScript narrows a union by
its literal `type` property. To enforce exhaustive handling, return from
every case of a value-producing switch or assert that the remaining value is
`never` in the `default` case of a side-effecting switch.

### Example

```ts

type Status = Typed<"Pending"> | Typed<"Completed">;

const getStatusMessage = (status: Status): string => {
  switch (status.type) {
    case "Pending":
      return "Waiting";
    case "Completed":
      return "Done";
  }
};

expect(getStatusMessage({ type: "Pending" })).toBe("Waiting");
```

## Extended by

- [`DecryptWithXChaCha20Poly1305Error`](https://evolu.dev/docs/api-reference/common/Crypto/interfaces/DecryptWithXChaCha20Poly1305Error)
- [`FetchTransportError`](https://evolu.dev/docs/api-reference/common/Http/interfaces/FetchTransportError)
- [`FetchStatusError`](https://evolu.dev/docs/api-reference/common/Http/interfaces/FetchStatusError)
- [`FetchBodyError`](https://evolu.dev/docs/api-reference/common/Http/interfaces/FetchBodyError)
- [`Some`](https://evolu.dev/docs/api-reference/common/Option/interfaces/Some)
- [`None`](https://evolu.dev/docs/api-reference/common/Option/interfaces/None)
- [`Done`](https://evolu.dev/docs/api-reference/common/Result/interfaces/Done)
- [`SqlIdentifier`](https://evolu.dev/docs/api-reference/common/Sqlite/interfaces/SqlIdentifier)
- [`RawSql`](https://evolu.dev/docs/api-reference/common/Sqlite/interfaces/RawSql)
- [`RunStateRunning`](https://evolu.dev/docs/api-reference/common/Task/interfaces/RunStateRunning)
- [`RunStateAborted`](https://evolu.dev/docs/api-reference/common/Task/interfaces/RunStateAborted)
- [`RunStateSettled`](https://evolu.dev/docs/api-reference/common/Task/interfaces/RunStateSettled)
- [`RunEventDataChildAdded`](https://evolu.dev/docs/api-reference/common/Task/interfaces/RunEventDataChildAdded)
- [`RunEventDataChildRemoved`](https://evolu.dev/docs/api-reference/common/Task/interfaces/RunEventDataChildRemoved)
- [`RunEventDataStateChanged`](https://evolu.dev/docs/api-reference/common/Task/interfaces/RunEventDataStateChanged)
- [`RetryError`](https://evolu.dev/docs/api-reference/common/Task/interfaces/RetryError)
- [`WebSocketSendError`](https://evolu.dev/docs/api-reference/common/WebSocket/interfaces/WebSocketSendError)
- [`WebSocketConnectError`](https://evolu.dev/docs/api-reference/common/WebSocket/interfaces/WebSocketConnectError)
- [`WebSocketConnectionError`](https://evolu.dev/docs/api-reference/common/WebSocket/interfaces/WebSocketConnectionError)
- [`WebSocketConnectionCloseError`](https://evolu.dev/docs/api-reference/common/WebSocket/interfaces/WebSocketConnectionCloseError)
- [`AppOwner`](https://evolu.dev/docs/api-reference/common/local-first/Owner/interfaces/AppOwner)
- [`ShardOwner`](https://evolu.dev/docs/api-reference/common/local-first/Owner/interfaces/ShardOwner)
- [`SharedOwner`](https://evolu.dev/docs/api-reference/common/local-first/Owner/interfaces/SharedOwner)
- [`SharedReadonlyOwner`](https://evolu.dev/docs/api-reference/common/local-first/Owner/interfaces/SharedReadonlyOwner)
- [`OwnerWebSocketTransport`](https://evolu.dev/docs/api-reference/common/local-first/Owner/interfaces/OwnerWebSocketTransport)
- [`ProtocolHeader`](https://evolu.dev/docs/api-reference/common/local-first/Protocol/interfaces/ProtocolHeader)
- [`ProtocolVersionError`](https://evolu.dev/docs/api-reference/common/local-first/Protocol/interfaces/ProtocolVersionError)
- [`ProtocolInvalidDataError`](https://evolu.dev/docs/api-reference/common/local-first/Protocol/interfaces/ProtocolInvalidDataError)
- [`ProtocolWriteKeyError`](https://evolu.dev/docs/api-reference/common/local-first/Protocol/interfaces/ProtocolWriteKeyError)
- [`ProtocolWriteError`](https://evolu.dev/docs/api-reference/common/local-first/Protocol/interfaces/ProtocolWriteError)
- [`ProtocolQuotaError`](https://evolu.dev/docs/api-reference/common/local-first/Protocol/interfaces/ProtocolQuotaError)
- [`ProtocolSyncError`](https://evolu.dev/docs/api-reference/common/local-first/Protocol/interfaces/ProtocolSyncError)
- [`ProtocolTimestampMismatchError`](https://evolu.dev/docs/api-reference/common/local-first/Protocol/interfaces/ProtocolTimestampMismatchError)
- [`ApplyProtocolMessageAsClientResponse`](https://evolu.dev/docs/api-reference/common/local-first/Protocol/interfaces/ApplyProtocolMessageAsClientResponse)
- [`ApplyProtocolMessageAsClientNoResponse`](https://evolu.dev/docs/api-reference/common/local-first/Protocol/interfaces/ApplyProtocolMessageAsClientNoResponse)
- [`ApplyProtocolMessageAsClientBroadcast`](https://evolu.dev/docs/api-reference/common/local-first/Protocol/interfaces/ApplyProtocolMessageAsClientBroadcast)
- [`ApplyProtocolMessageAsRelayResult`](https://evolu.dev/docs/api-reference/common/local-first/Protocol/interfaces/ApplyProtocolMessageAsRelayResult)
- [`StorageQuotaError`](https://evolu.dev/docs/api-reference/common/local-first/Storage/interfaces/StorageQuotaError)
- [`TimestampDriftError`](https://evolu.dev/docs/api-reference/common/local-first/Timestamp/interfaces/TimestampDriftError)
- [`TimestampCounterOverflowError`](https://evolu.dev/docs/api-reference/common/local-first/Timestamp/interfaces/TimestampCounterOverflowError)
- [`TimestampTimeOutOfRangeError`](https://evolu.dev/docs/api-reference/common/local-first/Timestamp/interfaces/TimestampTimeOutOfRangeError)
- [`NodeSignalAbortReason`](https://evolu.dev/docs/api-reference/nodejs/interfaces/NodeSignalAbortReason)
- [`SpawnError`](https://evolu.dev/docs/api-reference/nodejs/interfaces/SpawnError)

## Properties

<a id="type"></a>

### type

```ts
readonly type: Tag;
```

Defined in: [packages/common/src/Type.ts:8883](https://github.com/evoluhq/evolu/blob/a18269a1b822c670b507c6a9b73b23eed32551fe/packages/common/src/Type.ts#L8883)