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:
- A branded string Type that validates JSON parsing and structural conformity
- A serialization function (Type → branded JSON string)
- 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
| Parameter | Type |
|---|---|
type | T |
name | Name |
Returns
[BrandType<Type<"String", string, string, StringError, string, StringError>, Name,
| JsonError
| InferErrors<T>, StringError>, (value) => string & Brand<Name>, (value) => InferType<T>]