A lightweight, type-safe schema validation and parsing library for TypeScript.
npm install object-decoder
# or
pnpm add object-decoder
# or
yarn add object-decoderImport the parsers you need and define a schema.
import { object, string, number } from 'object-decoder';
const userSchema = object({
id: number(),
name: string(),
email: string(),
});
const data = {
id: 1,
name: 'John Doe',
email: 'john@example.com',
};
const user = userSchema.parse(data);
console.log(user);You can infer the TypeScript type from your schema using the $Infer type.
import { object, string, number, type $Infer } from 'object-decoder';
const userSchema = object({
id: number(),
name: string(),
});
type User = $Infer<typeof userSchema>;
// type User = {
// id: number;
// name: string;
// }You can extend existing object schemas or exclude fields from them.
Use .extend() to combine two object schemas.
import { object, string, number } from 'object-decoder';
const baseUser = object({
id: number(),
});
const detailedUser = baseUser.extend(object({
name: string(),
email: string(),
}));
// detailedUser expects id, name, and emailUse .exclude() to remove fields from an object schema.
import { object, string, number } from 'object-decoder';
const userSchema = object({
id: number(),
name: string(),
password: string(),
});
const publicUserSchema = userSchema.exclude('password');
// publicUserSchema expects id and nameThe library provides various parsers to construct complex data models.
import { string, number, boolean } from 'object-decoder';
const myString = string();
const myNumber = number();
const myBoolean = boolean();import { array, string } from 'object-decoder';
const tags = array(string());import { object, string, optional } from 'object-decoder';
const schema = object({
required: string(),
optional: optional(string()),
});import { union, string, number } from 'object-decoder';
const id = union([string(), number()]);import { enumerate } from 'object-decoder';
enum Role {
Admin = 'ADMIN',
User = 'USER',
}
const roleSchema = enumerate(Role);You can configure object parsers to disallow unknown fields.
import { object, string } from 'object-decoder';
const strictSchema = object({
name: string(),
}, { disallowUnknownFields: true });Parses the input and returns the typed data. Throws an error if validation fails.
Parses the input and returns a result object.
const result = schema.safeParse(input);
if (result.success) {
console.log(result.value);
} else {
console.error(result.error);
}