Main API
Codec.serialize
Serializes a known type using a Funtypes Codec.
For example:
import * as ft from "funtypes";
import * as s from "funtypes-schemas";
export const UserCodec = ft.Object({
id: ft.Number,
name: ft.String,
dateOfBirth: s.ParsedDateTimeString(),
});
// => ft.Codec<{ id: number; name: string; dateOfBirth: Date }>
// ✅ Serializes the date object to a
// string
assert.deepEqual(
UserCodec.parse({
id: 1,
name: "Forbes Lindesay",
dateOfBirth: new Date(
"1970-01-01T00:00:00.000Z",
),
}),
{
id: 1,
name: "Forbes Lindesay",
dateOfBirth: "1970-01-01T00:00:00.000Z",
},
);
// 🚨 Invalid: id should be a number, but here
// we've passed a string instead.
assert.throws(() => {
UserCodec.serialize({
// TypeScript will expect the object passed
// to `serialize` to be valid.
// @ts-expect-error
id: "42",
name: "Forbes Lindesay",
dateOfBirth: new Date(
"1970-01-01T00:00:00.000Z",
),
});
});
// 🚨 Invalid: dateOfBirth is already a string,
// but the parsed value should have been a
// Date.
assert.throws(() => {
UserCodec.serialize({
id: 1,
name: "Forbes Lindesay",
// TypeScript will expect the object passed
// to `serialize` to be valid.
// @ts-expect-error
dateOfBirth: "1970-01-01T00:00:00.000Z",
});
});