What is type-fest?
The type-fest package provides a collection of essential TypeScript types for use in a wide range of applications. It includes utility types, primitive types, and complex object types to enhance TypeScript's static typing capabilities.
What are type-fest's main functionalities?
Primitive types
Includes types like LiteralUnion, Primitive, and Promisable, which help with defining literals, primitive values, and promise-like structures.
{"isPrimitive": true}
Basic utilities
Provides utility types such as Except, Mutable, ReadonlyDeep, and many others that help manipulate and transform types in various ways.
{"isEmptyArray": array.length === 0}
Object types
Contains types for working with objects, such as Merge and RequireAtLeastOne, which assist in merging types and ensuring at least one property is present, respectively.
{"isObjectClean": Object.keys(object).length === 0 && object.constructor === Object}
Conditional types
Includes conditional types like ConditionalExcept and ConditionalKeys, which apply conditions to filter keys or properties of types.
{"isTruthy": T extends false | '' | 0 | null | undefined ? false : true}
Other packages similar to type-fest
utility-types
The utility-types package provides a collection of utility types for TypeScript, similar to type-fest. It includes types for operations like picking, omitting, and readonly transformations. It is comparable to type-fest but may have a different set of utilities and slightly different implementations.
ts-essentials
ts-essentials offers a wide range of TypeScript types, including deep readonly and writable types, as well as utility types for better type inference. It is similar to type-fest in its goal to enhance TypeScript's type system but may differ in the specific types offered and its API design.
typesafe-actions
While typesafe-actions is more focused on Redux action creators, it also provides utility types for better type safety in Redux. It is similar to type-fest in that it enhances TypeScript's type system but is more specialized for Redux-related typing.
A collection of essential TypeScript types
Many of the types here should have been built-in. You can help by suggesting some of them to the TypeScript project.
Either add this package as a dependency or copy-paste the needed types. No credit required. 👌
PR welcome for additional commonly needed types and docs improvements. Read the contributing guidelines first.
Install
$ npm install type-fest
Requires TypeScript >=3.2
Usage
import {Except} from 'type-fest';
type Foo = {
unicorn: string;
rainbow: boolean;
};
type FooWithoutRainbow = Except<Foo, 'rainbow'>;
API
Click the type names for complete docs.
Basic
Utilities
Except
- Create a type from an object type without certain keys. This is a stricter version of Omit
.Mutable
- Convert an object with readonly
properties into a mutable object. Inverse of Readonly<T>
.Merge
- Merge two types into a new type. Keys of the second type overrides keys of the first type.MergeExclusive
- Create a type that has mutually exclusive properties.RequireAtLeastOne
- Create a type that requires at least one of the given properties.ReadonlyDeep
- Create a deeply immutable version of a object
/Map
/Set
/Array
type.LiteralUnion
- Create a union type by combining primitive types and literal types without sacrificing auto-completion in IDEs for the literal type part of the union. Workaround for Microsoft/TypeScript#29729.Promisable
- Create a type that represents either the value or the value wrapped in PromiseLike
.Opaque
- Create an opaque type.
Miscellaneous
Declined types
If we decline a type addition, we will make sure to document the better solution here.
Diff
and Spread
- The PR author didn't provide any real-world use-cases and the PR went stale. If you think this type is useful, provide some real-world use-cases and we might reconsider.
Tips
Built-in types
There are many advanced types most users don't know about.
You can find some examples in the TypeScript docs.
Maintainers
License
(MIT OR CC0-1.0)