Formatter
Formats JavaScript values into readable strings.
format is intended for logs, diagnostics, and error messages. It handles primitives, objects, arrays, dates, regular expressions, maps, sets, class instances, errors, circular references, and redactable values. formatJson wraps JSON formatting with redaction and circular-reference handling, and the module also includes helpers for property keys, paths, and dates.
Formatting
Models
A callable interface representing a function that converts a Value into a Format, which defaults to string.
When to use
Use when you want to type a formatting or rendering function generically, or when you are building a pipeline that accepts pluggable formatters.
Details
This is a pure callable type and carries no runtime implementation. It is contravariant in Value and covariant in Format.
See
Signature
interface Formatter<in Value, out Format = string> {
(value: Value): Format;
}Serialization
formatJson
Stringifies a value to JSON safely, silently dropping circular references.
When to use
Use when you need valid JSON output, unlike format, and the input may contain circular references that should be silently omitted rather than throwing a TypeError.
Details
Uses JSON.stringify internally with a replacer that tracks the current object ancestry. Circular references are replaced with undefined, which omits them from object output. Redactable values are automatically redacted before serialization. Values not supported by JSON otherwise follow standard JSON.stringify behavior. The space parameter controls indentation and defaults to 0.
Gotchas
When the root input is undefined, a symbol, or a function, formatJson returns "null" instead of the undefined returned by JSON.stringify. Nested values retain standard JSON.stringify behavior.
See
Signature
declare function formatJson(
input: unknown,
options?: {
readonly space?: string | number;
},
): string;
Converts any JavaScript value into a human-readable string.
When to use
Use when you need to format arbitrary JavaScript values for debugging, logging, or error messages.
Details
- Output is not valid JSON; use formatJson when you need parseable JSON. - Handles
BigInt,Symbol,Set,Map,Date,RegExp, and class instances thatJSON.stringifycannot represent. - Circular references are shown as"[Circular]"instead of throwing. - Primitives: stringified naturally (null,undefined,123,true). Strings are JSON-quoted. - Objects with a customtoString(notObject.prototype.toString):toString()is called unlessignoreToStringistrue. - Errors with acause: formatted as"<message> (cause: <cause>)". - Iterables (Set,Map, etc.): formatted asClassName([...elements]). - Class instances: wrapped asClassName({...}). -Redactablevalues are automatically redacted. - Arrays/objects with 0โ1 entries are inline; larger ones are pretty-printed whenspaceis set. -spaceโ indentation unit (number of spaces, or a string like"\t"). Defaults to0(compact). -ignoreToStringโ skip callingtoString(). Defaults tofalse.See
formatJsonFormatter