{"id":13465135,"url":"https://github.com/ts-essentials/ts-essentials","last_synced_at":"2025-05-12T05:33:28.821Z","repository":{"id":39571044,"uuid":"148948562","full_name":"ts-essentials/ts-essentials","owner":"ts-essentials","description":"All essential TypeScript types in one place 🤙","archived":false,"fork":false,"pushed_at":"2025-04-28T23:41:43.000Z","size":705,"stargazers_count":3917,"open_issues_count":24,"forks_count":126,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-05-12T04:13:06.390Z","etag":null,"topics":["essentials","toolbox","type-level-programming","types","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ts-essentials.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-09-15T23:46:19.000Z","updated_at":"2025-05-12T03:13:49.000Z","dependencies_parsed_at":"2024-01-03T14:14:16.077Z","dependency_job_id":"61a7e6e9-a432-4185-84f9-e82f4a707876","html_url":"https://github.com/ts-essentials/ts-essentials","commit_stats":{"total_commits":422,"total_committers":44,"mean_commits":9.590909090909092,"dds":0.7393364928909952,"last_synced_commit":"4233566ef2bffc232637a373e2c9219dd70be10a"},"previous_names":["krzkaczor/ts-essentials"],"tags_count":62,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ts-essentials%2Fts-essentials","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ts-essentials%2Fts-essentials/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ts-essentials%2Fts-essentials/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ts-essentials%2Fts-essentials/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ts-essentials","download_url":"https://codeload.github.com/ts-essentials/ts-essentials/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253683413,"owners_count":21947131,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["essentials","toolbox","type-level-programming","types","typescript"],"created_at":"2024-07-31T14:01:00.648Z","updated_at":"2025-05-12T05:33:28.798Z","avatar_url":"https://github.com/ts-essentials.png","language":"TypeScript","readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"/logo.png\" width=\"120\" alt=\"ts-essentials\"\u003e\n  \u003ch3 align=\"center\"\u003ets-essentials\u003c/h3\u003e\n  \u003cp align=\"center\"\u003eAll essential TypeScript types in one place 🤙\u003c/p\u003e\n  \u003cp align=\"center\"\u003e\n    \u003ca href=\"https://www.npmjs.com/package/ts-essentials\" title=\"View this project on NPM\"\u003e\n      \u003cimg alt=\"Version\" src=\"https://img.shields.io/npm/v/ts-essentials.svg\"\u003e\n    \u003c/a\u003e\n    \u003cimg alt=\"Downloads\" src=\"https://img.shields.io/npm/dm/ts-essentials.svg\"\u003e\n    \u003ca href=\"https://github.com/ts-essentials/ts-essentials/actions?query=branch%3Amaster\" title=\"View Github Build status\"\u003e\n      \u003cimg alt=\"Build status\" src=\"https://github.com/ts-essentials/ts-essentials/actions/workflows/ci.yml/badge.svg\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://t.me/ts_essentials\" title=\"Get support in Telegram\"\u003e\n      \u003cimg alt=\"Telegram\" src=\"https://img.shields.io/badge/-telegram-red?color=white\u0026logo=telegram\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"/package.json\"\u003e\u003cimg alt=\"Software License\" src=\"https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://codechecks.io\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/codechecks/docs/master/images/badges/badge-default.svg?sanitize=true\" alt=\"codechecks.io\"\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/p\u003e\n\n## Install\n\n```sh\nnpm install --save-dev ts-essentials\n```\n\n👉 We require `typescript\u003e=4.5`. If you're looking for support for older TS versions, please have a look at the\n[TypeScript dependency table](https://github.com/ts-essentials/ts-essentials/tree/master#TypeScript-dependency-table)\n\n👉 As we really want types to be stricter, we require enabled\n[strictNullChecks](https://www.typescriptlang.org/tsconfig#strictNullChecks) in your project\n\n## API\n\n`ts-essentials` is a set of high-quality, useful TypeScript types that make writing type-safe code easier.\n\n### Basic\n\n- [`Builtin`](/lib/built-in) - Matches primitive, function, date, error or regular expression\n- [`KeyofBase`](/lib/key-of-base) -\n  [`keyofStringsOnly`](https://www.typescriptlang.org/tsconfig#keyofStringsOnly)-tolerant analogue for `PropertyKey`\n- [`Prettify\u003cType\u003e`](/lib/prettify/) - flattens type and makes it more readable on the hover in your IDE\n- [`Primitive`](/lib/primitive) - Matches any\n  [primitive value](https://developer.mozilla.org/en-US/docs/Glossary/Primitive)\n- [`StrictExclude\u003cUnionType, ExcludedMembers\u003e`](/lib/strict-exclude) - Constructs a type by excluding from `UnionType`\n  all union members that are assignable to `ExcludedMembers`. This is stricter version of\n  [`Exclude`](https://www.typescriptlang.org/docs/handbook/utility-types.html#excludeuniontype-excludedmembers)\n- [`StrictExtract\u003cType, Union\u003e`](/lib/strict-extract) - Constructs a type by extracting from `Type` all union members\n  that are assignable to `Union`. This is stricter version of\n  [`Extract`](https://www.typescriptlang.org/docs/handbook/utility-types.html#extracttype-union)\n- [`StrictOmit\u003cType, Keys\u003e`](/lib/strict-omit) - Constructs a type by picking all properties from `Type` and then\n  removing `Keys`. This is stricter version of\n  [`Omit`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys)\n- [`Writable\u003cType\u003e`](/lib/writable) - Constructs a type with removed `readonly` for all properties of `Type`, meaning\n  the properties of the constructed type can be reassigned\n\n### Utility types\n\n- [`AsyncOrSync\u003cType\u003e`](/lib/async-or-sync) - Constructs a type with `Type` or `PromiseLike\u003cType\u003e`\n- [`AsyncOrSyncType\u003cType\u003e`](/lib/async-or-sync-type) - Unwraps `AsyncOrSync` type\n- [`Dictionary\u003cType, Keys?\u003e`](/lib/dictionary) - Constructs a required object type which property keys are `Keys`\n  (`string` by default) and which property values are `Type`\n- [`Merge\u003cObject1, Object2\u003e`](/lib/merge) - Constructs a type by picking all properties from `Object1` and `Object2`.\n  Property values from `Object2` override property values from `Object1` when property keys are the same\n- [`MergeN\u003cTuple\u003e`](/lib/merge-n) - Constructs a type by merging objects with type `Merge` in tuple `Tuple` recursively\n- [`Newable\u003cReturnType\u003e`](/lib/newable) - Constructs a class type with constructor which has return type `ReturnType`\n- [`NonNever\u003cType\u003e`](/lib/non-never) - Constructs a type by picking all properties from type `Type` which values don't\n  equal to `never`\n- [`OmitProperties\u003cType, Value\u003e`](/lib/omit-properties) - Constructs a type by picking all properties from type `Type`\n  and removing those properties which values equal to `Value`\n- [`Opaque\u003cType, Token\u003e`](/lib/opaque) - Constructs a type which is a subset of `Type` with a specified unique token\n  `Token`\n- [`PathValue\u003cType, Path\u003e`](/lib/path-value) - Constructs a path value for type `Type` and path `Path`\n- [`Paths\u003cType\u003e`](/lib/paths) - Constructs a union type by picking all possible paths for type `Type`\n- [`PickProperties\u003cType, Value\u003e`](/lib/pick-properties) - Constructs a type by picking all properties from type `Type`\n  which values equal to `Value`\n- [`SafeDictionary\u003cType, Keys?\u003e`](/lib/safe-dictionary) - Constructs an optional object type which property keys are\n  `Keys` (`string` by default) and which property values are `Type`\n- [`UnionToIntersection\u003cUnion\u003e`](/lib/union-to-intersection) - Constructs a intersection type from union type `Union`\n- [`ValueOf\u003cType\u003e`](/lib/value-of) - Constructs a type for type `Type` and equals to a primitive for primitives, array\n  elements for arrays, function return type for functions or object property values for objects\n- [`XOR\u003cType1, Type2, Type3?, ..., Type50?\u003e`](/lib/xor) - Construct a type which is assignable to either type `Type1`,\n  `Type2` but not both. Starting in ts-essentials@10, it supports up to 50 generic types.\n\n### Mark wrapper types\n\n- [`MarkOptional\u003cType, Keys\u003e`](/lib/mark-optional) - Constructs a type by picking all properties from type `Type` where\n  properties `Keys` are set as optional, meaning they aren't required\n- [`MarkReadonly\u003cType, Keys\u003e`](/lib/mark-readonly) - Constructs a type by picking all properties from type `Type` where\n  properties `Keys` are set to `readonly`, meaning they cannot be reassigned\n- [`MarkRequired\u003cType, Keys\u003e`](/lib/mark-required) - Constructs a type by picking all properties from type `Type` where\n  properties `Keys` are set as required\n- [`MarkWritable\u003cType, Keys\u003e`](/lib/mark-writable) - Constructs a type by picking all properties from type `Type` where\n  properties `Keys` remove `readonly` modifier, meaning they can be reassigned\n\n### Deep wrapper types\n\n- [`Buildable\u003cType\u003e`](/lib/buildable) - Constructs a type by combining `DeepPartial` and `DeepWritable`, meaning all\n  properties from type `Type` are recursively set as non-`readonly` and optional, meaning they can be reassigned and\n  aren't required\n- [`DeepMarkRequired\u003cType, KeyPathUnion\u003e`](/lib/deep-mark-required) - Constructs a type by picking all properties from type `Type` where\n  properties by paths `KeyPathUnion` are set as required. To mark properties required on one level, use [`MarkRequired\u003cType, Keys\u003e`](/lib/mark-required).\n- [`DeepNonNullable\u003cType\u003e`](/lib/deep-non-nullable) - Constructs a type by picking all properties from type `Type`\n  recursively and exclude `null` and `undefined` property values from all of them. To make properties non-nullable on\n  one level, use [`NonNullable\u003cType\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#nonnullabletype)\n- [`DeepNullable\u003cType\u003e`](/lib/deep-nullable) - Constructs a type by picking all properties from type `Type` recursively\n  and include `null` property values for all of them\n- [`DeepOmit\u003cType, Filter\u003e`](/lib/deep-omit) - Constructs a type by picking all properties from type `Type` and removing\n  properties which values are `never` or `true` in type `Filter`. If you'd like type `Filter` to be validated against a\n  structure of `Type`, please use [`StrictDeepOmit\u003cType, Filter\u003e`](./lib/strict-deep-omit/).\n- [`DeepPartial\u003cType\u003e`](/lib/deep-partial) - Constructs a type by picking all properties from type `Type` recursively\n  and setting them as optional, meaning they aren't required. To make properties optional on one level, use\n  [`Partial\u003cType\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype)\n- [`DeepPick\u003cType, Filter\u003e`](/lib/deep-pick) - Constructs a type by picking set of properties, which have property\n  values `never` or `true` in type `Filter`, from type `Type`. If you'd like type `Filter` to be validated against a\n  structure of `Type`, please use [`StrictDeepPick\u003cType, Filter\u003e`](./lib/strict-deep-pick/).\n- [`DeepReadonly\u003cType\u003e`](/lib/deep-readonly) - Constructs a type by picking all properties from type `Type` recursively\n  and setting `readonly` modifier, meaning they cannot be reassigned. To make properties `readonly` on one level, use\n  [`Readonly\u003cType\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#readonlytype)\n- [`DeepRequired\u003cType\u003e`](/lib/deep-required) - Constructs a type by picking all properties from type `Type` recursively\n  and setting as required. To make properties required on one level, use\n  [`Required\u003cType\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#requiredtype)\n- [`DeepUndefinable\u003cType\u003e`](/lib/deep-undefinable) - Constructs a type by picking all properties from type `Type`\n  recursively and include `undefined` property values for all of them\n- [`DeepWritable\u003cType\u003e`](/lib/deep-writable) - Constructs a type by picking all properties from type `Type` recursively\n  and removing `readonly` modifier, meaning they can be reassigned. To make properties writable on one level, use\n  `Writable\u003cType\u003e`\n- [`StrictDeepOmit\u003cType, Filter\u003e`](/lib/strict-deep-omit) - Constructs a type by picking all properties from type `Type`\n  and removing properties which values are `never` or `true` in type `Filter`. The type `Filter` is validated against a\n  structure of `Type`.\n- [`StrictDeepPick\u003cType, Filter\u003e`](/lib/strict-deep-pick) - Constructs a type by picking set of properties, which have\n  property values `never` or `true` in type `Filter`, from type `Type`. The type `Filter` is validated against a\n  structure of `Type`.\n\n### Key types\n\n- [`OptionalKeys\u003cType\u003e`](/lib/optional-keys) - Constructs a union type by picking all optional properties of object type\n  `Type`\n- [`PickKeys\u003cType, Value\u003e`](/lib/pick-keys) - Constructs a union type by picking all properties of object type `Type`\n  which values are assignable to type `Value`\n- [`ReadonlyKeys\u003cType\u003e`](/lib/readonly-keys) - Constructs a union type by picking all `readonly` properties of object\n  type `Type`, meaning their values cannot be reassigned\n- [`RequiredKeys\u003cType\u003e`](/lib/required-keys) - Constructs a union type by picking all required properties of object type\n  `Type`\n- [`WritableKeys\u003cType\u003e`](/lib/writable-keys) - Constructs a union type by picking all writable properties of object type\n  `Type`, meaning their values can be reassigned\n\n### Type checkers\n\n- [`Exact\u003cType, Shape\u003e`](/lib/exact) - Returns `Type` when type `Type` and `Shape` are identical. Otherwise returns\n  `never`\n- [`IsAny\u003cType\u003e`](/lib/is-any) - Returns `true` when type `Type` is `any`. Otherwise returns `false`\n- [`IsNever\u003cType\u003e`](/lib/is-never) - Returns `true` when type `Type` is `never`. Otherwise returns `false`\n- [`IsUnknown\u003cType\u003e`](/lib/is-unknown) - Returns `true` when type `Type` is `unknown`. Otherwise returns `false`\n- [`IsTuple\u003cType\u003e`](/lib/is-tuple) - Returns `Type` when type `Type` is tuple. Otherwise returns `never`\n- [`NonEmptyObject\u003cObject\u003e`](/lib/non-empty-object) - Returns `Object` when `Object` has at least one key. Otherwise\n  returns `never`\n\n### Arrays and Tuples\n\n- [`AnyArray\u003cType?\u003e`](/lib/any-array) - Matches `Array` or `ReadonlyArray` (`Type` is `any` by default)\n- [`ArrayOrSingle\u003cType\u003e`](/lib/array-or-single) - Matches `Type` or `Type[]`\n- [`ElementOf\u003cType\u003e`](/lib/element-of) - Constructs a type which equals to array element type for type `Type`\n- [`Head\u003cType\u003e`](/lib/head) - Constructs a type which equals to first element in type `Type`\n- [`NonEmptyArray\u003cType\u003e`](/lib/non-empty-array) - Matches array with at least one element of type `Type`\n- [`ReadonlyArrayOrSingle`](/lib/readonly-array-or-single) - Matches `Type` or `readonly Type[]`\n- [`Tail\u003cType\u003e`](/lib/tail) - Constructs a type which equals to elements but first one in type `Type`\n- [`Tuple\u003cType?\u003e`](/lib/tuple) - Matches type constraint for tuple with elements of type `Type` (`any` by default)\n\n### Change case\n\n- [`CamelCase\u003cType\u003e`](/lib/camel-case) - Converts type `Type` to camel case (e.g. `camelCase`)\n- [`DeepCamelCaseProperties\u003cType\u003e`](/lib/deep-camel-case-properties) - Constructs a type by picking all properties from\n  type `Type` recursively and converting all of them to camel case\n\n### Function types\n\n- [`AnyFunction\u003cArgs?, ReturnType?\u003e`](/lib/any-function) - Matches function type with arguments type `Args` (`any[]` by\n  default) and return type `ReturnType` (`any` by default)\n- [`PredicateFunction`](/lib/predicate-function) - Matches type constraint for type guard, meaning first argument is\n  used in return type and return type is\n  [type predicate](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates)\n- [`PredicateType\u003cType\u003e`](/lib/predicate-type) - Constructs a type which equals to narrowed type in predicate function\n  `Type`\n\n### Utility functions\n\n⚠️ Make sure you add `ts-essentials` to your `dependencies` (`npm install --save ts-essentials`) to avoid runtime errors\n\n- [`new UnreachableCaseError(value)`](/lib/functions/unreachable-case-error) - Matches runtime class instance type that\n  helps check exhaustiveness for `value`. When `value` isn't `never`, it shows TypeScript error\n- [`assert(condition, message?)`](/lib/functions/assert) - Matches runtime function that helps assert `condition`. When\n  `condition` is falsy, it throws an error with `Assertion Error: ${message}` (message is\n  `\"no additional info provided\"` by default)\n- [`createFactoryWithConstraint\u003cConstraint\u003e()(value)`](/lib/functions/create-factory-with-constraint) - Matches runtime\n  function, which validates that type of `value` matches `Constraint` without changing resulting type of `value`.\n  Ponyfill for\n  [`satisfies` operator](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-9.html#the-satisfies-operator)\n- [`isExact\u003cExpected\u003e()(actual)`](/lib/functions/is-exact) - Matches runtime function, which validates that type of\n  `actual` equals to `Expected`. Otherwise shows TypeScript error\n- [`noop(..._args)`](/lib/functions/noop) - Matches runtime function that does nothing with arguments `_args`\n\n## Search\n\nWhen one of utility types is known by a different name, kindly ask adding it here for the better search.\n\n- `ArrayValues` - [`ValueOf\u003cType\u003e`](/lib/value-of)\n- `Branded` - [`Opaque\u003cType, Token\u003e`](/lib/opaque)\n- `ConditionalKeys` - [`PickKeys\u003cType, Value\u003e`](/lib/pick-keys)\n- `Except` - [`StrictOmit\u003cType, Keys\u003e`](/lib/strict-omit)\n- `Get` - [`PathValue\u003cType, Path\u003e`](/lib/path-value)\n- `Mutable` - [`Writable\u003cType\u003e`](/lib/writable)\n- `Nominal` - [`Opaque\u003cType, Token\u003e`](/lib/opaque)\n- `Set*`, e.g. `SetOptional` - `Mark*`, e.g. [`MarkReadonly\u003cType, Keys\u003e`](/lib/mark-readonly)\n- `Unwrap` - [`Prettify\u003cType\u003e`](/lib/prettify/)\n- `ValueOf` - `DictionaryValues`\n\n## Built-in types\n\nTypeScript provides several [utility types](https://www.typescriptlang.org/docs/handbook/utility-types.html) to\nfacilitate common type transformations. These utilities are available globally.\n\n- [`Awaited\u003cType\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#awaitedtype) - This type is meant to\n  model operations like `await` in `async` functions, or the `.then()` method on `Promise`s - specifically, the way that\n  they recursively unwrap `Promise`s\n- [`Capitalize\u003cStringType\u003e`](https://www.typescriptlang.org/docs/handbook/2/template-literal-types.html#capitalizestringtype) -\n  Converts the first character in the string to an uppercase equivalent\n- [`ConstructParameters\u003cType\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#constructorparameterstype) -\n  Constructs a tuple or array type from the types of a constructor function type `Type`\n- [`Exclude\u003cUnionType, ExcludedMembers\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#excludeuniontype-excludedmembers) -\n  Constructs a type by excluding from `UnionType` all union members that are assignable to `ExcludedMembers`\n- [`Extract\u003cType, Union\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#extracttype-union) -\n  Constructs a type by extracting from `Type` all union members that are assignable to `Union`\n- [`InstanceType\u003cType\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#instancetypetype) - Constructs\n  a type consisting of the instance type of a constructor function in `Type`\n- [`Lowercase\u003cStringType\u003e`](https://www.typescriptlang.org/docs/handbook/2/template-literal-types.html#lowercasestringtype) -\n  Converts each character in the string to the lowercase equivalent\n- [`NonNullable\u003cType\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#nonnullabletype) - Constructs a\n  type by excluding null and undefined from `Type`\n- [`Omit\u003cType, Keys\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#omittype-keys) - Constructs a\n  type by picking all properties from `Type` and then removing `Keys`\n- [`Parameters\u003cType\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#parameterstype) - Constructs a\n  tuple type from the types used in the parameters of a function type `Type`\n- [`Partial\u003cType\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype) - Constructs a type\n  with all properties of `Type` set to optional\n- [`Pick\u003cType, Keys\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#picktype-keys) - Constructs a\n  type by picking the set of properties `Keys` from `Type`\n- [`Readonly\u003cType\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#readonlytype) - Constructs a type\n  with all properties of `Type` set to `readonly`, meaning the properties of the constructed type cannot be reassigned\n- [`Record\u003cKeys, Type\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#recordkeys-type) - Constructs\n  an object type whose property keys are `Keys` and whose property values are `Type`\n- [`Required\u003cType\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#requiredtype) - Constructs a type\n  consisting of all properties of `Type` set to required\n- [`ReturnType\u003cType\u003e`](https://www.typescriptlang.org/docs/handbook/utility-types.html#returntypetype) - Constructs a\n  type consisting of the return type of function type `Type` parameter\n- [`Uncapitalize\u003cStringType\u003e`](https://www.typescriptlang.org/docs/handbook/2/template-literal-types.html#uncapitalizestringtype) -\n  Converts the first character in the string to a lowercase equivalent\n- [`Uppercase\u003cStringType\u003e`](https://www.typescriptlang.org/docs/handbook/2/template-literal-types.html#uppercasestringtype) -\n  Converts each character in the string to the uppercase version\n\n## TypeScript dependency table\n\n| `ts-essentials` | `typescript` / type of dependency                                                     |\n| --------------- | ------------------------------------------------------------------------------------- |\n| `^10.0.0`       | `^4.5.0` / [peer optional](https://github.com/ts-essentials/ts-essentials/issues/370) |\n| `^9.4.0`        | `^4.1.0` / [peer optional](https://github.com/ts-essentials/ts-essentials/issues/370) |\n| `^8.0.0`        | `^4.1.0` / peer                                                                       |\n| `^5.0.0`        | `^3.7.0` / peer                                                                       |\n| `^3.0.1`        | `^3.5.0` / peer                                                                       |\n| `^1.0.1`        | `^3.2.2` / dev                                                                        |\n| `^1.0.0`        | `^3.0.3` / dev                                                                        |\n\n## Limitations\n\n- This project doesn't use `extends` Constraints on `infer` Type Variables as it's introduced in TypeScript 4.7, but currently ts-essentials supports versions below, e.g. TypeScript 4.5. Read more in https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-7.html#extends-constraints-on-infer-type-variables\n\n## Contributors\n\nSpecial shout-out to active contributors:\n\n- [Kris Kaczor](https://x.com/krzkaczor) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=krzkaczor)\n- [Xiao Liang](https://scholar.google.com/citations?user=3xZtvpAAAAAJ) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=yxliang01)\n- [Mateusz Burzyński](https://x.com/AndaristRake) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=Andarist)\n- [Artur Kozak](https://x.com/quezak2) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=quezak)\n- [Zihua Wu](https://x.com/gabriel_wzh) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=lucifer1004)\n- [Alexey Berezin](https://x.com/beraliv) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=Beraliv)\n- [Som Shekhar Mukherjee](https://github.com/som-sm) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=som-sm)\n\nAnd thanks goes to these wonderful people:\n\n- [Maciej Bembenista](https://github.com/macbem) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=macbem)\n- [Michael Tontchev](https://www.linkedin.com/in/michael-tontchev-7956a269/) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=MichaelTontchev)\n- [Thomas den Hollander](https://github.com/ThomasdenH) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=ThomasdenH)\n- [Esa-Matti Suuronen](https://x.com/esamatti)\n- [Ilya Semenov](https://github.com/IlyaSemenov) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=IlyaSemenov)\n- [Patricio Palladino](https://github.com/alcuadrado)\n- [Kevin Peno](https://github.com/kevinpeno) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=kevinpeno)\n- [Dom Parfitt](https://github.com/DomParfitt)\n- [Eduardo Rafael](https://x.com/TheEduardoRFS) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=EduardoRFS)\n- [Andrew C. Dvorak](https://github.com/acdvorak) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=acdvorak)\n- [Adam Russell](https://github.com/a1russell) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=a1russell)\n- [Piotr Szlachciak](https://github.com/sz-piotr) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=sz-piotr)\n- [Mikhail Swift](https://github.com/mikhailswift) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=mikhailswift)\n- [Ryan Zhang](https://github.com/DevilZh)\n- [Francesco Borzì](https://www.linkedin.com/in/francesco-borzi/) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=FrancescoBorzi)\n- [Marnick L'Eau](https://github.com/leaumar)\n- [Egor Gorbachev](https://github.com/kubk)\n- [Bill Barry](https://github.com/bbarry) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=bbarry)\n- [Andrzej Wódkiewicz](https://github.com/akwodkiewicz) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=akwodkiewicz)\n- [Christian Junker](https://www.linkedin.com/in/chjdev/)\n- [Matthew Leffler](https://github.com/mattleff) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=mattleff)\n- [studds](https://github.com/studds) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=studds)\n- [Robert Vitonsky](https://github.com/vitonsky)\n- [Itay Ronen](https://github.com/itayronen) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=itayronen)\n- [Yaroslav Larin](https://github.com/cyberbiont)\n- [liaoyinglong](https://github.com/liaoyinglong) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=liaoyinglong)\n- [Yannick Stachelscheid](https://github.com/yss14) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=yss14)\n- [Peter Smolinský](https://github.com/psmolinsky) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=psmolinsky)\n- [Anurag Hazra](https://github.com/anuraghazra) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=anuraghazra)\n- [Bishwajit Jha](https://github.com/ajitjha393) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=ajitjha393)\n- [Sergey Ukustov](https://github.com/ukstv) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=ukstv)\n- [Homa Wong](https://github.com/unional) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=unional)\n- [polyipseity](https://github.com/polyipseity) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=polyipseity)\n- [Kristóf Poduszló](https://github.com/kripod) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=kripod)\n- [MT Lewis](https://github.com/mtlewis) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=mtlewis)\n- [Daniel Bertocci](https://github.com/DanielBertocci) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=DanielBertocci)\n- [Myles J](https://github.com/mylesj) / [💻](https://github.com/ts-essentials/ts-essentials/commits?author=mylesj)\n\n💻 - contributions, i.e. links to commits by the user on this project\n\nContributions of any kind welcome! [Read more](./CONTRIBUTING.md)\n","funding_links":[],"categories":["TypeScript","Uncategorized","Underlying Technologies"],"sub_categories":["Uncategorized","TypeScript"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fts-essentials%2Fts-essentials","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fts-essentials%2Fts-essentials","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fts-essentials%2Fts-essentials/lists"}