[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

## Call Signature

```ts
function typed<Tag>(tag: Tag): TypedType<Tag>;
```

Defined in: [packages/common/src/Type.ts:3528](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Type.ts#L3528)

Creates a runtime-validated typed object with a `type` discriminant.

### Example

```ts
const Card = typed("Card", {
  cardNumber: CardNumber,
  expiry: DateIso,
});

const Cash = typed("Cash", {
  currency: NonEmptyTrimmedString,
});

const Payment = union(Card, Cash);
type Payment = typeof Payment.Type;

const result = Payment.fromUnknown(data);
if (result.ok) {
  switch (result.value.type) {
    case "Card":
      console.log(result.value.cardNumber);
      break;
    case "Cash":
      console.log(result.value.currency);
      break;
  }
}
```

### See

[Typed](https://evolu.dev/docs/api-reference/common/Type/interfaces/Typed) for type-only discrimination.

## Call Signature

```ts
function typed<Tag, Props>(tag: Tag, props: Props): TypedType<Tag, Props>;
```

Defined in: [packages/common/src/Type.ts:3530](https://github.com/evoluhq/evolu/blob/e7144e2bbe9069362b62dec1b64a8aa922b8f1b0/packages/common/src/Type.ts#L3530)

With additional properties.