[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) › ExtractTyped

```ts
type ExtractTyped<Output, Name> = Extract<
  Output,
  {
    type: Name;
  }
>;
```

Defined in: [packages/common/src/Type.ts:12016](https://github.com/evoluhq/evolu/blob/f0109fb501a593010e858e39248dde1200eeb2d7/packages/common/src/Type.ts#L12016)

Extracts members of a [Typed](https://evolu.dev/docs/api-reference/common/Type/interfaces/Typed) Output union by their `type` literal.

The requested tag is constrained to the union's actual discriminator values,
so a misspelling is a TypeScript error instead of silently producing
`never`.

### Example

```ts
import {
  assertType,
  String,
  discriminatedUnion,
  typed,
  type ExtractTyped,
} from "@evolu/common";

const Create = typed("Create", { id: String });
const Delete = typed("Delete", { id: String });
const Message = discriminatedUnion(Create, Delete);
type Message = typeof Message.Output;

type CreateMessage = ExtractTyped<Message, "Create">;

assertType<typeof Create.Output, CreateMessage>();

// @ts-expect-error "Cretae" is not a Message type.
type _Typo = ExtractTyped<Message, "Cretae">;
```