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

```ts
function literal<Expected>(
  expected: ValidateLiteral<Expected>,
): LiteralType<Expected>;
```

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

Literal [Type](https://evolu.dev/docs/api-reference/common/Type/interfaces/Type).

[String](https://evolu.dev/docs/api-reference/common/Type/variables/String), [Number](https://evolu.dev/docs/api-reference/common/Type/variables/Number), [BigInt](https://evolu.dev/docs/api-reference/common/Type/variables/BigInt), and [Boolean](https://evolu.dev/docs/api-reference/common/Type/variables/Boolean) literal Types
are children of their corresponding primitive Types and accept the widened
primitive through `from.parent`. The expected value must have one exact
literal type. Validation uses `===`, so `-0` matches `0`.

In [templateLiteralParser](https://evolu.dev/docs/api-reference/common/Type/functions/templateLiteralParser), use a string Literal Type when the literal
should be decoded into the Output Tuple. Use a raw string when it should only
frame the canonical string.

### Example

```ts
import {
  assertEqual,
  assertErr,
  assertOk,
  assertType,
  Data,
  literal,
} from "@evolu/common";

const Ready = literal("ready");

assertType<typeof Ready.Output, "ready">();
assertOk(Ready.fromUnknown("ready"), "ready");

const invalid = Ready.fromUnknown("pending");
assertErr(invalid);
assertType(Data, invalid.error);
assertEqual(invalid.error, {
  type: "Literal",
  expected: "ready",
  value: "pending",
});
```