A utility library for creating mapped types in TypeScript with support for class-validator and class-transformer metadata inheritance
npm install @pixielity/mapped-types



A utility library for creating mapped types in TypeScript with support for class-validator and class-transformer metadata inheritance.
``bash`
npm install @pixielity/mapped-types
For validation and transformation features, install the optional peer dependencies:
`bash`
npm install class-validator class-transformer reflect-metadata
- Create new types by picking, omitting, or making properties optional
- Create intersection types from multiple classes
- Inherit validation metadata from class-validator
- Inherit transformation metadata from class-transformer
- Inherit property initializers from source classes
- Zero dependencies (class-validator and class-transformer are optional)
Creates a new type by picking a set of properties from an existing class.
`typescript
import { PickType } from '@pixielity/mapped-types';
import { IsString, IsEmail } from 'class-validator';
class UserDto {
@IsString()
name: string;
@IsEmail()
email: string;
@IsString()
password: string;
}
// CreateUserDto will have name, email, and password properties
// with the same validation rules as UserDto
class CreateUserDto extends PickType(UserDto, ['name', 'email', 'password']) {}
`
Creates a new type by omitting a set of properties from an existing class.
`typescript
import { OmitType } from '@pixielity/mapped-types';
import { IsString, IsEmail } from 'class-validator';
class UserDto {
@IsString()
name: string;
@IsEmail()
email: string;
@IsString()
password: string;
}
// UserResponseDto will have name and email properties, but not password
// with the same validation rules as UserDto
class UserResponseDto extends OmitType(UserDto, ['password']) {}
`
Creates a new type by making all properties of an existing class optional.
`typescript
import { PartialType } from '@pixielity/mapped-types';
import { IsString, IsEmail } from 'class-validator';
class UserDto {
@IsString()
name: string;
@IsEmail()
email: string;
}
// UpdateUserDto will have optional name and email properties
// with the same validation rules as UserDto, but they'll only be
// applied if the properties are defined
class UpdateUserDto extends PartialType(UserDto) {}
`
Creates a new type by intersecting multiple existing classes.
`typescript
import { IntersectionType } from '@pixielity/mapped-types';
import { IsString } from 'class-validator';
class UserDto {
@IsString()
name: string;
}
class AddressDto {
@IsString()
street: string;
}
// UserWithAddressDto will have both name and street properties
// with the same validation rules as the original classes
class UserWithAddressDto extends IntersectionType(UserDto, AddressDto) {}
`
For detailed API documentation, please visit our API Reference.
`typescript`
function PickType
`typescript`
function OmitType
`typescript`
function PartialType
classRef: Type
options: {
skipNullProperties?: boolean
} = {}
): MappedType
`typescript``
function IntersectionType
Please read our Contributing Guide for details on our code of conduct and the process for submitting pull requests.
We use SemVer for versioning and Changesets to manage releases. For the versions available, see the tags on this repository.
This project is licensed under the MIT License - see the LICENSE file for details.