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

```ts
type ValidateOutput<T> =
  IsUnion<T> extends false
    ? T
    : CompileTimeError<
        "Type",
        "Output Type must be one concrete Type node. Pass a Union Type node instead of a union of Type nodes."
      >;
```

Defined in: [packages/common/src/Type.ts:2018](https://github.com/evoluhq/evolu/blob/dd96d79f1dbe9a49fa12ce8e0aa7d3d0177795ca/packages/common/src/Type.ts#L2018)

Requires one concrete output [Type](https://evolu.dev/docs/api-reference/common/Type/interfaces/Type) node in a factory parameter.

Rejects TypeScript unions of Type nodes. A [union](https://evolu.dev/docs/api-reference/common/Type/functions/union) Type is one concrete
node and remains valid. Use an intersection with the inferred parameter type
to preserve its specific Type. This guard performs no runtime validation.

### Example

```ts
import {
  assertSame,
  Number,
  String,
  union,
  type AnyType,
  type ValidateOutput,
} from "@evolu/common";

const defineOutput = <T extends AnyType>(type: T & ValidateOutput<T>): T =>
  type;

assertSame(defineOutput(String), String);

const Value = union(String, Number);
assertSame(defineOutput(Value), Value);

const uncertain = String as typeof String | typeof Number;
// @ts-expect-error Output Type must be one concrete Type node. Pass a Union Type node instead of a union of Type nodes.
defineOutput(uncertain);
```