The difference between object
, exact
, and inexact
The three decoders in the “object” family of decoders—object()
, exact()
and inexact()
—are very similar and only differ in how they treat extra properties on input values.
For example, for a definition like:
import { exact, inexact, number, object, string } from 'decoders';
const thing = { a: string, b: number };
And a runtime input of:
{
a: "hi",
b: 42,
c: "extra", // Note "c" is not a known field
}
Extra properties | Output value | Inferred type | |
---|---|---|---|
object(thing) | discarded | {a: "hi", b: 42} | {a: string, b: number} |
exact(thing) | not allowed | n/a (rejected) | {a: string, b: number} |
inexact(thing) | retained | {a: "hi", b: 42, c: "extra"} | {a: string, b: number, [string]: unknown} |