Practice
1. What is the main purpose of the
class-transformer library in a NestJS application?easy
Solution
Step 1: Understand the role of class-transformer
The library is designed to transform plain objects into instances of classes and back, which helps in managing data cleanly.Step 2: Compare with other options
Options B, C, and A relate to other parts of NestJS or frontend, not data transformation.Final Answer:
To convert plain JavaScript objects into class instances and vice versa -> Option AQuick Check:
class-transformer = object-class conversion [OK]
Hint: Remember: class-transformer changes plain objects to class instances [OK]
Common Mistakes:
- Confusing class-transformer with HTTP or database modules
- Thinking it styles frontend components
- Assuming it manages server routing
2. Which decorator from
class-transformer is used to exclude a property from the transformed output?easy
Solution
Step 1: Identify the decorator for exclusion
The@Exclude()decorator marks properties to be left out during transformation.Step 2: Understand other decorators
@Expose()includes properties,@Transform()customizes transformation, and@Type()defines property types.Final Answer:
@Exclude() -> Option BQuick Check:
Exclude means leave out = @Exclude() [OK]
Hint: Exclude properties with @Exclude() decorator [OK]
Common Mistakes:
- Using @Expose() to exclude instead of include
- Confusing @Transform() with exclusion
- Not importing decorators correctly
3. Given the following code, what will be the output of
console.log(userTransformed)?
import { plainToInstance, Exclude } from 'class-transformer';
class User {
id: number;
name: string;
@Exclude() password: string;
}
const plainUser = { id: 1, name: 'Alice', password: 'secret' };
const userTransformed = plainToInstance(User, plainUser);
console.log(userTransformed);medium
Solution
Step 1: Understand @Exclude effect on transformation
The@Exclude()decorator removes thepasswordproperty from the transformed class instance.Step 2: Analyze the output of plainToInstance
The result is an instance ofUserwithidandname, but nopassword.Final Answer:
User { id: 1, name: 'Alice' } -> Option CQuick Check:
@Exclude removes password = User without password [OK]
Hint: Properties with @Exclude() won't appear in class instances [OK]
Common Mistakes:
- Expecting password to be present after transformation
- Confusing plain object with class instance output
- Assuming error occurs due to missing password
4. Identify the error in this NestJS code using
class-transformer:
import { plainToInstance } from 'class-transformer';
class Product {
id: number;
name: string;
}
const plainProduct = { id: 10, name: 'Book' };
const product = plainToInstance(Product, plainProduct, { excludeExtraneousValues: true });
console.log(product);
Why does product print an empty object?medium
Solution
Step 1: Understand excludeExtraneousValues option
This option removes all properties not marked with@Expose()during transformation.Step 2: Check class property decorators
TheProductclass properties lack@Expose(), so all are excluded, resulting in an empty object.Final Answer:
Missing @Expose() decorators on class properties -> Option AQuick Check:
excludeExtraneousValues needs @Expose() [OK]
Hint: Use @Expose() with excludeExtraneousValues to keep properties [OK]
Common Mistakes:
- Assuming excludeExtraneousValues disables transformation
- Thinking plain object keys cause the issue
- Ignoring need for decorators with this option
5. You want to transform a plain object with nested properties into class instances using
class-transformer. Which approach correctly handles nested objects?
import { plainToInstance, Type } from 'class-transformer';
class Address {
street: string;
city: string;
}
class User {
name: string;
@Type(() => Address)
address: Address;
}
const plainUser = {
name: 'Bob',
address: { street: 'Main St', city: 'Townsville' }
};
const user = plainToInstance(User, plainUser);
console.log(user.address instanceof Address);
What will console.log output and why?hard
Solution
Step 1: Recognize the role of @Type decorator
The@Type(() => Address)decorator tells class-transformer to convert the nested plain object into anAddressclass instance.Step 2: Check the output of instanceof
Since transformation happens correctly,user.addressis an instance ofAddress, so the output istrue.Final Answer:
true, because @Type decorator converts nested object to Address instance -> Option DQuick Check:
@Type enables nested class conversion = true [OK]
Hint: Use @Type(() => Class) for nested object transformation [OK]
Common Mistakes:
- Forgetting @Type causes nested objects to stay plain
- Assuming nested objects transform automatically
- Misusing @Type decorator syntax
