Estoy tratando de crear una clase DTO. Pero tengo problemas para encontrar una forma adecuada de excluir propiedades no declaradas. Entonces, si alguien intenta crear una clase DTO y agrega propiedades adicionales que no están declaradas dentro de la clase, esas propiedades deben ignorarse y no agregarse.
import { IsString, MinLength } from 'class-validator' export class CreateUserDto { @IsString() email: string @IsString() @MinLength(6) password: string @IsString() firstname: string @IsString() lastname: string constructor (payload: any) { const dto = Object.assign(this, payload) console.log(dto) } }Para solo 4 campos, prefiero escribir manualmente 4 líneas para asignarlas a cada una, pero supongo que si tiene más DTO con muchos más campos, podría ayudar con un método más versátil.
Aquí he usado Object.entries y Object.fromEntries junto con un filtro para excluir propiedades que no necesitamos:
const dto = Object.assign(this, Object.fromEntries(Object.entries(payload).filter(([k]) => keys.includes(k)))) Y keys serían algo como:
["email", ...]También puede hacer de esto una función para la reutilización o incluso un decorador.