GithubHelp home page GithubHelp logo

Comments (3)

emir-gradient avatar emir-gradient commented on June 5, 2024 3

Hi.

Since you are utilizing class-transformer, @Type decorator from class-transformer could work for you.

You need:


class RootDto {
    @IsNumber()
    id : number,
    @IsString()
    description : string,
    @IsString()
    type : string,
    
    @ValidateNested()
    @Type(typeHelpOptions => {
        const type = typeHelpOptions.object.type; // attribute type value from the object.
        switch (type) {
          case 'TypeOne':
            return TypeOneDto;
          case 'TypeTwo':
            return TypeTwoDto;
          case 'TypeThree':
            return TypeThreeDto;
          default:
            throw new Error(`No matching class found for: ${type}`);
        }
      })
    metadata : TypeOneDto | TypeTwoDto | TypeThreeDto
}

Important: For this to work, your object, must go through class-transformer method plainToClass. For example, if you are using Nest, it should already happen. But, in general, if you are manually instantiating class and filling with plain object, then @Type won't even get executed, hence, won't work.

from class-validator.

mdhthahmd avatar mdhthahmd commented on June 5, 2024

Hi @emir-gradient ,
Yes this is with nestjs and your solution seems to work well, i did add @IsObject() decorator to make metadata field required.

Thanks.

from class-validator.

github-actions avatar github-actions commented on June 5, 2024

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

from class-validator.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.