Skip to content
GitHub

Jsonified

type alias in meocord/core Since 4.1.0

type Jsonified<T> = unknown extends T
  ? unknown
  : [T] extends [JsonSafe]
    ? T
    : T extends { toJSON(...args: any[]): infer R }
      ? Jsonified<R>
      : T extends string | number | boolean | null
        ? T
        : T extends bigint
          ? never
          : T extends JsonDropped
            ? undefined
            : T extends ReadonlyMap<unknown, unknown> | ReadonlySet<unknown>
              ? Record<string, never>
              : T extends readonly unknown[]
                ? { -readonly [I in keyof T]: JsonItem<T[I]> }
                : { [K in keyof JsonObject<T>]: JsonObject<T>[K] }

A value as it arrives after a trip through JSON: what toJSON returns, so a Date as a string; a Map or a Set as an empty object; a function, a symbol or undefined left out of an object, null in a list, and undefined on its own.

A BigInt cannot be written, so it is never.

See also