TypeScript icon, indicating that this package has built-in type declarations

2.0.0 • Public • Published

DTO’s (Data Transfer Object) based on zod

Daniel Bannert's open source work is supported by the community on GitHub Sponsors


Use npm or yarn to install

    npm install @anolilab/zod-dto --save


    yarn add @anolilab/zod-dto


Basic usage

import { StringDto } from "@anolilab/zod-dto"

const dto = new StringDto("test string"); // the constructor has a zod validator

console.log(dto.value) // returns "test string"

If you don’t want Zod to throw errors when validation fails, use the second parameter of the constructor.

This method returns an object containing either the successfully parsed data or a ZodError instance containing detailed information about the validation problems.

import { StringDto } from "@anolilab/zod-dto"

const dto = new StringDto("1", true); // the constructor has a zod validator

console.log(dto.value) // return { success: false; error: ZodError }

You can transform the object to a json with

dto.toJson() // returns { value: "test string" }

You can get the zod object with

StringDto.zod() // returns ZodType

Example of using @anolilab/zod-dto in Entity dto

import { NumberDto, StringDto, AbstractDto, DatetimeDto } from "@anolilab/zod-dto";

export default abstract class AbstractEntity {
    protected abstract properties: object;

    readonly createdAt!: DatetimeDto;

    readonly updatedAt!: DatetimeDto;

    readonly deletedAt!: DatetimeDto;

    public toJson(): string {
        return JSON.stringify(this.prepareData());

    public toObject<T extends { [key: string]: any }>(): T {
        return this.prepareData();

    private prepareData<T extends { [key: string]: any }>(): T {
        const data: { [key: string]: any } = {};

        Object.entries(this.properties).forEach(([key, value]) => {
            let v = value;

            if (value instanceof AbstractDto) {
                v = value.value;
            } else {
                throw new TypeError(`Value of key ${key} needs to be a class that extends AbstractDto.`);

            data[key] = v;

        return data as any;

export default class SettingEntity extends AbstractEntity {
    readonly id!: NumberDto;

    readonly phone!: StringDto;

        public properties: {
            id?: NumberDto;
            phone?: StringDto;
    ) {

        Object.assign(this, properties);

const settingEntity = new SettingEntity({
    id: NumberDto.nullable(1),
    phone: StringDto.nullable("+4900000"),


This project uses SemVer for versioning. For the versions available, see the tags on this repository.

Supported Node.js Versions

Libraries in this ecosystem make a best effort to track Node.js’ release schedule. Here’s a post on why we think this is important.


If you would like to help take a look at the list of issues and check our Contributing guild.

Note: please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.



The anolilab zod-prisma is open-sourced software licensed under the MIT license


npm i @anolilab/zod-dto

DownloadsWeekly Downloads






Unpacked Size

62.9 kB

Total Files


Last publish


  • prisis