What is ts-essentials?
The ts-essentials package provides a set of TypeScript types to enhance the TypeScript typing experience, offering more strict and powerful type definitions. It includes utility types, type guards, and other helpers that are not available in the standard TypeScript library.
What are ts-essentials's main functionalities?
DeepReadonly
Makes all properties of an object type recursively readonly. It is useful for defining immutable state or configurations.
type MyObject = { a: { b: { c: number } } };\nconst readonlyObject: DeepReadonly<MyObject> = { a: { b: { c: 1 } } };\n// readonlyObject.a.b.c = 2; // Error: Cannot assign to 'c' because it is a read-only property.
Writable
Converts a readonly object into a writable one, removing the readonly modifier from all properties.
type MyReadOnlyObject = { readonly a: number };\nconst writable: Writable<MyReadOnlyObject> = { a: 1 };\nwritable.a = 2; // No error, 'a' is writable.
StrictOmit
Creates a type by omitting the keys provided from the given object type, ensuring that only keys that exist on the type are specified.
interface MyObject { a: number; b: string; c: boolean; }\nconst myObject: StrictOmit<MyObject, 'a' | 'b'> = { c: true };\n// myObject.a or myObject.b does not exist.
LiteralUnion
Allows for a union type to include specific literal types as well as additional types, typically used for string literals with an escape hatch for other values.
type Direction = LiteralUnion<'left' | 'right', string>;\nconst direction: Direction = 'any string'; // No error, can be 'left', 'right', or any other string.
MarkRequired
Marks certain properties of an object type as required, changing them from optional to mandatory.
type MyObject = { a?: number; b: string; }\nconst required: MarkRequired<MyObject, 'a'> = { a: 1, b: 'string' };\n// Property 'a' is required in 'required'.
Other packages similar to ts-essentials
utility-types
Provides a collection of utility types for TypeScript, similar to ts-essentials. It includes types for operations like picking, omitting, and mapping properties of object types.
type-fest
A comprehensive library of utility types for TypeScript, with a wide range of type helpers. It covers more ground than ts-essentials and is regularly updated with new types.
typesafe-actions
Focused on Redux action creators, typesafe-actions provides utility types and functions for creating and handling actions in a type-safe manner, which is a more specific use case compared to the general utilities provided by ts-essentials.
ts-essentials
All essential TypeScript types in one place ๐ค
Install
npm install --save-dev ts-essentials
๐ We require typescript>=4.5
. If you're looking for support for older TS versions, please have a look at the
TypeScript dependency table
๐ As we really want types to be stricter, we require enabled
strictNullChecks in your project
API
ts-essentials
is a set of high-quality, useful TypeScript types that make writing type-safe code easier.
Basic
Utility types
AsyncOrSync<Type>
- Constructs a type with Type
or PromiseLike<Type>
AsyncOrSyncType<Type>
- Unwraps AsyncOrSync
typeDictionary<Type, Keys?>
- Constructs a required object type which property keys are Keys
(string
by default) and which property values are Type
Merge<Object1, Object2>
- Constructs a type by picking all properties from Object1
and Object2
.
Property values from Object2
override property values from Object1
when property keys are the sameMergeN<Tuple>
- Constructs a type by merging objects with type Merge
in tuple Tuple
recursivelyNewable<ReturnType>
- Constructs a class type with constructor which has return type ReturnType
NonNever<Type>
- Constructs a type by picking all properties from type Type
which values don't
equal to never
OmitProperties<Type, Value>
- Constructs a type by picking all properties from type Type
and removing those properties which values equal to Value
Opaque<Type, Token>
- Constructs a type which is a subset of Type
with a specified unique token
Token
PathValue<Type, Path>
- Constructs a path value for type Type
and path Path
Paths<Type>
- Constructs a union type by picking all possible paths for type Type
PickProperties<Type, Value>
- Constructs a type by picking all properties from type Type
which values equal to Value
SafeDictionary<Type, Keys?>
- Constructs an optional object type which property keys are
Keys
(string
by default) and which property values are Type
UnionToIntersection<Union>
- Constructs a intersection type from union type Union
ValueOf<Type>
- Constructs a type for type Type
and equals to a primitive for primitives, array
elements for arrays, function return type for functions or object property values for objectsXOR<Type1, Type2, Type3?, ..., Type50?>
- Construct a type which is assignable to either type Type1
,
Type2
but not both. Starting in ts-essentials@10, it supports up to 50 generic types.
Mark wrapper types
MarkOptional<Type, Keys>
- Constructs a type by picking all properties from type Type
where
properties Keys
are set as optional, meaning they aren't requiredMarkReadonly<Type, Keys>
- Constructs a type by picking all properties from type Type
where
properties Keys
are set to readonly
, meaning they cannot be reassignedMarkRequired<Type, Keys>
- Constructs a type by picking all properties from type Type
where
properties Keys
are set as requiredMarkWritable<Type, Keys>
- Constructs a type by picking all properties from type Type
where
properties Keys
remove readonly
modifier, meaning they can be reassigned
Deep wrapper types
Buildable<Type>
- Constructs a type by combining DeepPartial
and DeepWritable
, meaning all
properties from type Type
are recursively set as non-readonly
and optional, meaning they can be reassigned and
aren't requiredDeepNonNullable<Type>
- Constructs a type by picking all properties from type Type
recursively and exclude null
and undefined
property values from all of them. To make properties non-nullable on
one level, use NonNullable<Type>
DeepNullable<Type>
- Constructs a type by picking all properties from type Type
recursively
and include null
property values for all of themDeepOmit<Type, Filter>
- Constructs a type by picking all properties from type Type
and removing
properties which values are never
or true
in type Filter
. If you'd like type Filter
to be validated against a
structure of Type
, please use StrictDeepOmit<Type, Filter>
.DeepPartial<Type>
- Constructs a type by picking all properties from type Type
recursively
and setting them as optional, meaning they aren't required. To make properties optional on one level, use
Partial<Type>
DeepPick<Type, Filter>
- Constructs a type by picking set of properties, which have property
values never
or true
in type Filter
, from type Type
. If you'd like type Filter
to be validated against a
structure of Type
, please use StrictDeepPick<Type, Filter>
.DeepReadonly<Type>
- Constructs a type by picking all properties from type Type
recursively
and setting readonly
modifier, meaning they cannot be reassigned. To make properties readonly
on one level, use
Readonly<Type>
DeepRequired<Type>
- Constructs a type by picking all properties from type Type
recursively
and setting as required. To make properties required on one level, use
Required<Type>
DeepUndefinable<Type>
- Constructs a type by picking all properties from type Type
recursively and include undefined
property values for all of themDeepWritable<Type>
- Constructs a type by picking all properties from type Type
recursively
and removing readonly
modifier, meaning they can be reassigned. To make properties writable on one level, use
Writable<Type>
StrictDeepOmit<Type, Filter>
- Constructs a type by picking all properties from type Type
and removing properties which values are never
or true
in type Filter
. The type Filter
is validated against a
structure of Type
.StrictDeepPick<Type, Filter>
- Constructs a type by picking set of properties, which have
property values never
or true
in type Filter
, from type Type
. The type Filter
is validated against a
structure of Type
.
Key types
OptionalKeys<Type>
- Constructs a union type by picking all optional properties of object type
Type
PickKeys<Type, Value>
- Constructs a union type by picking all properties of object type Type
which values are assignable to type Value
ReadonlyKeys<Type>
- Constructs a union type by picking all readonly
properties of object
type Type
, meaning their values cannot be reassignedRequiredKeys<Type>
- Constructs a union type by picking all required properties of object type
Type
WritableKeys<Type>
- Constructs a union type by picking all writable properties of object type
Type
, meaning their values can be reassigned
Type checkers
Exact<Type, Shape>
- Returns Type
when type Type
and Shape
are identical. Otherwise returns
never
IsAny<Type>
- Returns true
when type Type
is any
. Otherwise returns false
IsNever<Type>
- Returns true
when type Type
is never
. Otherwise returns false
IsUnknown<Type>
- Returns true
when type Type
is unknown
. Otherwise returns false
IsTuple<Type>
- Returns Type
when type Type
is tuple. Otherwise returns never
NonEmptyObject<Object>
- Returns Object
when Object
has at least one key. Otherwise
returns never
Arrays and Tuples
Change case
Function types
Utility functions
โ ๏ธ Make sure you add ts-essentials
to your dependencies
(npm install --save ts-essentials
) to avoid runtime errors
Search
When one of utility types is known by a different name, kindly ask adding it here for the better search.
Built-in types
TypeScript provides several utility types to
facilitate common type transformations. These utilities are available globally.
Awaited<Type>
- This type is meant to
model operations like await
in async
functions, or the .then()
method on Promise
s - specifically, the way that
they recursively unwrap Promise
sCapitalize<StringType>
-
Converts the first character in the string to an uppercase equivalentConstructParameters<Type>
-
Constructs a tuple or array type from the types of a constructor function type Type
Exclude<UnionType, ExcludedMembers>
-
Constructs a type by excluding from UnionType
all union members that are assignable to ExcludedMembers
Extract<Type, Union>
-
Constructs a type by extracting from Type
all union members that are assignable to Union
InstanceType<Type>
- Constructs
a type consisting of the instance type of a constructor function in Type
Lowercase<StringType>
-
Converts each character in the string to the lowercase equivalentNonNullable<Type>
- Constructs a
type by excluding null and undefined from Type
Omit<Type, Keys>
- Constructs a
type by picking all properties from Type
and then removing Keys
Parameters<Type>
- Constructs a
tuple type from the types used in the parameters of a function type Type
Partial<Type>
- Constructs a type
with all properties of Type
set to optionalPick<Type, Keys>
- Constructs a
type by picking the set of properties Keys
from Type
Readonly<Type>
- Constructs a type
with all properties of Type
set to readonly
, meaning the properties of the constructed type cannot be reassignedRecord<Keys, Type>
- Constructs
an object type whose property keys are Keys
and whose property values are Type
Required<Type>
- Constructs a type
consisting of all properties of Type
set to requiredReturnType<Type>
- Constructs a
type consisting of the return type of function type Type
parameterUncapitalize<StringType>
-
Converts the first character in the string to a lowercase equivalentUppercase<StringType>
-
Converts each character in the string to the uppercase version
TypeScript dependency table
ts-essentials | typescript / type of dependency |
---|
^10.0.0 | ^4.5.0 / peer optional |
^9.4.0 | ^4.1.0 / peer optional |
^8.0.0 | ^4.1.0 / peer |
^5.0.0 | ^3.7.0 / peer |
^3.0.1 | ^3.5.0 / peer |
^1.0.1 | ^3.2.2 / dev |
^1.0.0 | ^3.0.3 / dev |
Contributors
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification.
Contributions of any kind welcome! Read more