The Codec function applies a bi-directional transform codec to a type.
The following creates a Codec that transforms a timestamp into a Date object.
const Timestamp = Type.Codec(Type.Integer()) // const Timestamp = {
.Decode(value => new Date(value)) // type: 'integer',
.Encode(value => value.getTime()) // '~codec': {
// decode: value => new Date(),
// encode: value => value.getTime()
// }
// }
// Use Value.Decode() and Value.Encode() to run Decode and Encode callbacks.
const D = Value.Decode(Timestamp, 12345) // const D = 1970-01-01T00:00:12.345Z
const E = Value.Encode(Timestamp, D) // const E = 12345
Use the StaticDecode and StaticEncode types that infer the Decoded and Encoded state of a type.
import Type, { type StaticEncode, type StaticDecode } from 'typebox'
const Timestamp = Type.Codec(Type.Integer())
.Decode(value => new Date(value))
.Encode(value => value.getTime())
type D = StaticDecode<typeof Timestamp> // type D = Date
type E = StaticEncode<typeof Timestamp> // type E = number