Package Exports
- zod-class
Readme
zod-class
This is a small utility library to accompany Zod to enable for Types and Schemas to be defined in one line by creating a Class.
Installation
npm install zod-classUsage
The $ utility function is the swiss army knife in zod-class - you use it for everything.
- Define a new class
import z from "zod";
import { Z } from "zod-class";
// define a class using a zod schema
export class Hello extends Z({
name: z.string(),
}) {
get message() {
return `hello ${name}`
}
}
const hello = new Hello({
hello: "sam",
});- Parse a value to an instance of a ZodClass
const hello = Z(Hello).parse(someVal)
// use method on the instance
const message = hello.message;- Extend a class
// extend a class by first activating it with `Z(Hello)`
export class World extends Z(Hello).extend({
world: z.string()
}) {}
const world = new World({
hello: "world",
world: "hello"
});Why?
It can be annoying to always have redundant declarations for types and schemas:
- the
z.objectdeclaration - the derived type using
z.infer
interface HelloSchema extends z.infer<typeof HelloSchema> {}
const HelloSchema = z.object({
key: z.string(),
});zod-class enables this to be achieved in a single line.
It also provides a class that can be instantiated and methods added to.
export class Person extends ZodClass({
firstName: z.string(),
lastName: z.string(),
}) {
get fullName() {
return `${this.firstName} ${this.lastName}`;
}
}