API reference / @evolu/common / Type / json

Function: json()

function json<T, Name>(
  type,
  name,
): [
  BrandType<
    Type<"String", string, string, StringError, string, StringError>,
    Name,
    JsonError | InferErrors<T>,
    StringError
  >,
  (value) => string & Brand<Name>,
  (value) => InferType<T>,
];

Defined in: packages/common/src/Type.ts:3604

Creates a branded JSON string Type and type-safe conversion functions for a given Type.

This factory creates:

  1. A branded string Type that validates JSON parsing and structural conformity
  2. A serialization function (Type → branded JSON string)
  3. A parsing function (branded JSON string → Type, skipping validation)

Optimized for Evolu's SQLite workflow where we store typed JSON strings and need type-safe conversions without double parsing.

Example

const Person = object({
  name: NonEmptyString100,
  age: FiniteNumber,
});
type Person = typeof Person.Type;

const [PersonJson, personToPersonJson, personJsonToPerson] = json(
  Person,
  "PersonJson",
);
// string & Brand<"PersonJson">
type PersonJson = typeof PersonJson.Type;

// Usage:
const person: Person = { name: "Alice", age: 30 };
const jsonString = personToPersonJson(person); // PersonJson
const backToPerson = personJsonToPerson(jsonString); // Person

Type Parameters

Type Parameter
T extends AnyType
Name extends string

Parameters

ParameterType
typeT
nameName

Returns

[BrandType<Type<"String", string, string, StringError, string, StringError>, Name, | JsonError | InferErrors<T>, StringError>, (value) => string & Brand<Name>, (value) => InferType<T>]

Was this page helpful?