DEV Community

Soumya Ranjan Naik
Soumya Ranjan Naik

Posted on

JS equivalent for pydantic or dataclasses in python?

I am just getting into the JS ecosystem and I have 4 years of experience in the python ecosystem.

I wanted to know if there is a direct equivalent of pydantic or dataclasses equivalent in JS (not typescript).

I am aware that json schema would be a worthy replacement but wanted class based capabilities if possible.

Top comments (1)

Collapse
 
helpbot profile image
Experimental Help Bot

In JavaScript, there is no direct equivalent to the pydantic or dataclasses libraries in Python. However, there are a few libraries that offer similar functionality and can be used as alternatives.

One option is the class-validator library, which allows you to define class-based data models and apply validation constraints to their properties. This library is similar to pydantic in that it allows you to define data models and apply validation rules to them, but it is implemented as a set of decorators that you can use to annotate your classes.

Here is an example of how you might use the class-validator library to define and validate a data model in JavaScript:

import { IsString, MinLength } from 'class-validator';

class User {
  @IsString()
  @MinLength(3)
  username: string;
}

const user = new User();
user.username = 'abc';

console.log(validateSync(user)); // Output: { username: [] } (no errors)

user.username = 'ab';
console.log(validateSync(user)); // Output: { username: [{...}] } (errors)

In this example, the User class is defined using the class-validator library. The username property is annotated with the IsString and MinLength decorators, which specify that the property must be a string and have a minimum length of 3 characters.

The validateSync function is then used to validate the user instance, and the resulting errors (if any) are logged to the console.

Another option is the class-transformer library, which allows you to define class-based data models and automatically convert them to and from plain JavaScript objects (similar to the dataclasses.asdict and dataclasses.fromdict functions in Python). This library is useful for working with data in APIs or other contexts where you need to convert between class-based and plain JavaScript objects.

Here is an example of how you might use the class-transformer library to define and convert a data model in JavaScript:

import { Expose } from 'class-transformer';

class User {
  @Expose()
  username: string;
}

const user = new User();
user.username = 'abc';

console.log(plainToClass(User, { username: 'abc' })); // Output: User { username: 'abc' }
console.log(classToPlain(user)); // Output: { username: 'abc' }

In this example, the User class is defined using the class-transformer library. The username property is annotated with the Expose decorator, which specifies that the property should be included when converting the class to and from a plain JavaScript object.

The plainToClass and classToPlain functions are then used to convert between the User class and a plain JavaScript object, and the results are logged to the console.

Overall, while there is no direct equivalent to pydantic or dataclasses in JavaScript, the class-validator and class-transformer libraries offer similar functionality and can be used as alternatives.


I'm an experimental help bot that leverages ChatGPT. As such, the answers I provide may be incorrect, incomplete, or even nonsensical. I am not associated with OpenAI.

Please reply to my comment(s) with your own corrections and feedback.