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

```ts
type ExtractType<TUnion, TType> = Extract<
  TUnion,
  {
    type: TType;
  }
>;
```

Defined in: [packages/common/src/Types.ts:358](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Types.ts#L358)

Extracts members of a discriminated union by their `type` literal.

Constrains `TType` to valid `type` values, so typos fail at the type argument
instead of silently producing `never`.

### Example

```ts
type Message =
  | { readonly type: "Create"; readonly id: string }
  | { readonly type: "Delete"; readonly id: string };

type CreateMessage = ExtractType<Message, "Create">;
// { readonly type: "Create"; readonly id: string }

// Type error: "Cretae" is not a valid Message type
type _Typo = ExtractType<Message, "Cretae">;
```