Introdução ao class-transformer: o que é e para que serve
\n\nclass-transformer é uma biblioteca poderosa para TypeScript e JavaScript que permite transformar objetos JavaScript comuns (plain) em instâncias de classes e vice-versa. Ela resolve um problema fundamental: ao trabalhar com dados de APIs, bancos de dados ou arquivos JSON, você obtém objetos simples sem métodos e tipos. O class-transformer "dá vida" a esses dados, transformando-os em objetos de classe completos com validação, transformação e serialização.
\n\nPrincipais cenários de uso:
\n- \n
- Transformação de JSON de API em objetos de classe tipados — por exemplo, após receber uma resposta de uma API REST, você pode transformar automaticamente o JSON em instâncias dos seus modelos. \n
- Validação e transformação de dados — com decoradores, você pode especificar quais campos são obrigatórios, quais precisam ser transformados (por exemplo, string em número ou data). \n
- Serialização de objetos em JSON — a transformação inversa de instâncias de classe em objetos simples para envio ao cliente ou armazenamento. \n
- Trabalho com objetos e arrays aninhados — a biblioteca consegue transformar recursivamente estruturas de dados aninhadas. \n
O class-transformer é frequentemente usado junto com class-validator (para validação) e frameworks populares como NestJS, TypeORM e MikroORM.
\n\nInstalação
\n\nA instalação da biblioteca é feita via npm ou yarn:
\n\nnpm install class-transformer --save\n\nOu, se você usa yarn:
\n\nyarn add class-transformer\n\nPara trabalhar com decoradores no TypeScript, é necessário ativar o suporte a decoradores experimentais no arquivo tsconfig.json:
{\n "compilerOptions": {\n "experimentalDecorators": true,\n "emitDecoratorMetadata": true\n }\n}\n\nTambém é recomendável instalar o reflect-metadata para o funcionamento correto dos decoradores:
\n\nnpm install reflect-metadata --save\n\nE importá-lo no início da sua aplicação (geralmente no arquivo principal index.ts ou main.ts):
import 'reflect-metadata';\n\nInício rápido com exemplo de código
\n\nVamos criar um modelo de usuário simples e transformar dados JSON em uma instância de classe.
\n\nimport { plainToClass, Expose, Type } from 'class-transformer';\nimport 'reflect-metadata';\n\n// Definindo a classe User\nclass User {\n @Expose()\n id: number;\n\n @Expose()\n firstName: string;\n\n @Expose()\n lastName: string;\n\n @Expose()\n @Type(() => Date)\n createdAt: Date;\n\n // Método da classe — disponível apenas após a transformação\n getFullName(): string {\n return `${this.firstName} ${this.lastName}`;\n }\n}\n\n// Exemplo de dados da API (plain object)\nconst plainUser = {\n id: 1,\n firstName: 'João',\n lastName: 'Silva',\n createdAt: '2024-01-15T10:30:00Z'\n};\n\n// Transformando plain object em instância da classe User\nconst userInstance = plainToClass(User, plainUser);\n\nconsole.log(userInstance instanceof User); // true\nconsole.log(userInstance.getFullName()); // "João Silva"\nconsole.log(userInstance.createdAt); // Date object: Tue Jan 15 2024 13:30:00 GMT+0300\n\n\nComo você pode ver, obtivemos um objeto de classe completo com métodos e tipos corretamente transformados (a string de data tornou-se um objeto Date).
\n\nPrincipais métodos e funções do class-transformer
\n\n1. plainToClass
\nO que faz: Transforma um ou mais objetos simples (plain) em instâncias de
Também na biblioteca
Cache em PHP: Redis, Memcached, APCu e cache de arquivos
Configuração de aplicativos Swift: biblioteca SwiftyConfiguration
Envio de email em Rust: bibliotecas lettre e mailparse para mensagens
gRPC C++: Guia completo com exemplos práticos para C++
Registro para Kotlin: melhores soluções e bibliotecas