Skip to main content
  1. All Posts/

ts-toolbelt

Tools TypeScript

TypeScript’s largest utility library



<p>
  </a><br /> <a rel="nofollow noopener" target="_blank" href="https://lgtm.com/projects/g/millsp/ts-toolbelt/context:javascript"></p> 
  
  <p>
    </a><br /> <a rel="nofollow noopener" target="_blank" href="#"></p> 
    
    <p>
      </a>
    </p>
    
    <p>
      <a rel="nofollow noopener" target="_blank" href="https://gitter.im/ts-toolbelt/community?utm_source=share-link&utm_medium=link&utm_campaign=share-link"></p> 
      
      <p>
        </a><br /> <a rel="nofollow noopener" target="_blank" href="http://makeapullrequest.com"></p> 
        
        <p>
          </a><br /> <a rel="nofollow noopener" target="_blank" href="https://conventionalcommits.org"></p> 
          
          <p>
            </a>
          </p>
          
          <p>
            <a rel="nofollow noopener" target="_blank" href="#"></p> 
            
            <p>
              </a>
            </p>
            
            <p>
              <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/">📖 Documentation</a><br /> ·<br /> 📣 Announcements<br /> ·<br /> 🐞 Report Bug<br /> ·<br /> 🍩 Request Feature<br /> ·<br /> 🤔 Ask Questions
            </p>
            
            <h2 dir="auto">
              <a rel="nofollow noopener" target="_blank" id="user-content-about" class="anchor" aria-hidden="true" href="#about"></a>About
            </h2>
            
            <p>
              <strong>ts-toolbelt</strong> is the largest, and most tested type library available right<br /> now, featuring <strong>+200 utilities</strong>. Our type collection packages some of the most<br /> advanced mapped types, conditional types, and recursive types on the market.<br /> <strong>Spend less time, build stronger</strong>. Benefit from a wide range of generic type<br /> functions to achieve better type safety.<br /> We work just like lodash, or ramda, but applied to the type system. Our mission<br /> is to provide you with simple ways to compute, change, and create types. We<br /> abstract all those complex type checks away for you. We provide a simple,<br /> reusable, and standard API to help you get more done with TypeScript.<br /> <strong>ts-toolbelt</strong> is a well organized package that can help you perform advanced<br /> operations on object types, union types, as well as function, and literal types.<br /> It is carefully and coherently designed for building robust, flexible, and<br /> type-safe software.
            </p>
            
            <p>
              <a rel="nofollow noopener" target="_blank" href="https://codesandbox.io/s/ts-toolbelt-x4jly?file=/src/index.ts"></p> 
              
              <p>
                </a>
              </p>
              
              <p>
                We are a community and a knowledge base. Everyone is welcome to ask questions<br /> about types. If you are stuck or you misunderstand something, you came to the<br /> right place!. We welcome beginners and advanced developers to come take part.<br /> <strong>Welcome!</strong>
              </p>
              
              <h2 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-getting-started" class="anchor" aria-hidden="true" href="#getting-started"></a>Getting Started
              </h2>
              
              <h3 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-prerequisites" class="anchor" aria-hidden="true" href="#prerequisites"></a>Prerequisites
              </h3>
              
              <pre>npm install typescript@^4.1.0 --save-dev</pre>
              
              <p>
                For best results, add this to your <code>tsconfig.json</code>
              </p>
              
              <pre>{

“compilerOptions”: { // highly recommended (required by few utilities) “strictNullChecks”: true,

// this is optional, but enable whenever possible
"strict": true,

// this is the lowest supported standard library
"lib": ["es2015"],

} }

              <h3 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-installation" class="anchor" aria-hidden="true" href="#installation"></a>Installation
              </h3>
              
              <pre>npm install ts-toolbelt --save</pre>
              
              <h3 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-hello-world" class="anchor" aria-hidden="true" href="#hello-world"></a>Hello World
              </h3>
              
              <pre>import {Object} from "ts-toolbelt"

// Check the docs below for more

// Merge two object together type merge = Object.Merge<{name: string}, {age?: number}> // {name: string, age?: number}

// Make a field of an object optional type optional = Object.Optional<{id: number, name: string}, “name”> // {id: number, name?: string}

              <p>
                You can <a rel="nofollow noopener" target="_blank" href="https://medium.com/free-code-camp/typescript-curry-ramda-types-f747e99744ab"><strong>level-up, and re-code this library from<br /> scratch</strong></a>.
              </p>
              
              <h2 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-documentation-" class="anchor" aria-hidden="true" href="#documentation-"></a><a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/">Documentation ⤢</a><br />
              </h2>
              
              <h3 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-imports" class="anchor" aria-hidden="true" href="#imports"></a>Imports
              </h3>
              
              <p>
                The project is organized around TypeScript&#8217;s main concepts:
              </p>
              
              <p>
                <strong>Any</strong><br /> <strong>Boolean</strong><br /> <strong>Class</strong><br /> <strong>Function</strong><br /> <strong>Iteration</strong><br /> <strong>List</strong>
              </p>
              
              <p>
                <strong>Number</strong><br /> <strong>Object</strong><br /> <strong>Object.P</strong><br /> <strong>String</strong><br /> <strong>Union</strong><br /> <strong>Test</strong>
              </p>
              
              <blockquote>
                <p>
                  <strong><code>TIP</code></strong> How to choose categories? Match your type with them.
                </p>
              </blockquote>
              
              <p>
                There are many ways to import the types into your project:
              </p>
              
              <ul dir="auto">
                <li>
                  <strong>Explicit</strong></p> <pre>import {Any, Boolean, Class, Function, Iteration, List, Number, Object, String, Union} from "ts-toolbelt"</pre>
                </li>
                
                <li>
                  <strong>Compact</strong></p> <pre>import {A, B, C, F, I, L, N, O, S, U} from "ts-toolbelt"</pre>
                </li>
                
                <li>
                  <strong>Portable</strong></p> <pre>import tb from "ts-toolbelt"</pre>
                </li>
              </ul>
              
              <p>
                You can also import our non-official API from the community:
              </p>
              
              <pre>import {Community} from "ts-toolbelt"</pre>
              
              <blockquote>
                <p>
                  <strong><code>TIP</code></strong> The community API is for our community to publish useful types that<br /> don&#8217;t see fit in the standard API.
                </p>
              </blockquote>
              
              <h3 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-utility-index" class="anchor" aria-hidden="true" href="#utility-index"></a>Utility Index
              </h3>
              
              <p>
                ANY<br /> OBJECT<br /> LIST<br /> FUNCTION<br /> STRING<br /> UNION<br /> CLASS<br /> BOOLEAN<br /> NUMBER<br /> OBJECT.P<br /> ITERATION
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/any_await.html">Await</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_assign.html">Assign</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_append.html">Append</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/function_autopath.html">AutoPath</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/string_at.html">At</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/union_diff.html">Diff</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/class_class.html">Class</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/boolean_and.html">And</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/number_absolute.html">Absolute</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_p_merge.html">Merge</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/iteration_iteration.html">Iteration</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/any_at.html">At</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_atleast.html">AtLeast</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_assign.html">Assign</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/function_compose.html">Compose</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/string_join.html">Join</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/union_exclude.html">Exclude</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/class_instance.html">Instance</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/boolean_not.html">Not</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/number_add.html">Add</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_p_omit.html">Omit</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/iteration_iterationof.html">IterationOf</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/any_cast.html">Cast</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_compulsory.html">Compulsory</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_atleast.html">AtLeast</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/function_curry.html">Curry</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/string_length.html">Length</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/union_filter.html">Filter</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/class_parameters.html">Parameters</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/boolean_or.html">Or</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/number_greater.html">Greater</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_p_pick.html">Pick</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/iteration_key.html">Key</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/any_compute.html">Compute</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_compulsorykeys.html">CompulsoryKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_compulsory.html">Compulsory</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/function_exact.html">Exact</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/string_replace.html">Replace</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/union_has.html">Has</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/boolean_xor.html">Xor</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/number_greatereq.html">GreaterEq</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_p_readonly.html">Readonly</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/iteration_next.html">Next</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/any_contains.html">Contains</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_diff.html">Diff</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_compulsorykeys.html">CompulsoryKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/function_function.html">Function</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/string_split.html">Split</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/union_intersectof.html">IntersectOf</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/number_isnegative.html">IsNegative</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_p_update.html">Update</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/iteration_pos.html">Pos</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/any_equals.html">Equals</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_either.html">Either</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_concat.html">Concat</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/function_length.html">Length</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/union_last.html">Last</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/number_ispositive.html">IsPositive</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_p_record.html">Record</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/iteration_prev.html">Prev</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/any_extends.html">Extends</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_exclude.html">Exclude</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_diff.html">Diff</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/function_narrow.html">Narrow</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/union_merge.html">Merge</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/number_iszero.html">IsZero</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/any_key.html">Key</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_excludekeys.html">ExcludeKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_drop.html">Drop</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/function_noinfer.html">NoInfer</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/union_nonnullable.html">NonNullable</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/number_lower.html">Lower</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/any_keys.html">Keys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_filter.html">Filter</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_either.html">Either</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/function_parameters.html">Parameters</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/union_nullable.html">Nullable</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/number_lowereq.html">LowerEq</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/any_knownkeys.html">KnownKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_filterkeys.html">FilterKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_exclude.html">Exclude</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/function_pipe.html">Pipe</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/union_pop.html">Pop</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/number_negate.html">Negate</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/any_is.html">Is</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_has.html">Has</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_excludekeys.html">ExcludeKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/function_promisify.html">Promisify</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/union_replace.html">Replace</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/number_range.html">Range</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/any_promise.html">Promise</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_haspath.html">HasPath</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_extract.html">Extract</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/function_return.html">Return</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/union_select.html">Select</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/number_sub.html">Sub</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/any_try.html">Try</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_includes.html">Includes</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_filter.html">Filter</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/function_uncurry.html">UnCurry</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/union_strict.html">Strict</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/any_type.html">Type</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_intersect.html">Intersect</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_filterkeys.html">FilterKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/function_validpath.html">ValidPath</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/union_listof.html">ListOf</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/any_x.html">x</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_intersectkeys.html">IntersectKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_flatten.html">Flatten</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_invert.html">Invert</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_group.html">Group</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_listof.html">ListOf</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_has.html">Has</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_merge.html">Merge</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_haspath.html">HasPath</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_mergeall.html">MergeAll</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_head.html">Head</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_modify.html">Modify</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_includes.html">Includes</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_nonnullable.html">NonNullable</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_intersect.html">Intersect</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_nonnullablekeys.html">NonNullableKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_intersectkeys.html">IntersectKeys</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_nullable.html">Nullable</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_keyset.html">KeySet</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_nullablekeys.html">NullableKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_last.html">Last</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_object.html">Object</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_lastkey.html">LastKey</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_omit.html">Omit</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_length.html">Length</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_optional.html">Optional</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_list.html">List</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_optionalkeys.html">OptionalKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_longest.html">Longest</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_overwrite.html">Overwrite</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_merge.html">Merge</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_partial.html">Partial</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_mergeall.html">MergeAll</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_patch.html">Patch</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_modify.html">Modify</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_patchall.html">PatchAll</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_nonnullable.html">NonNullable</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_path.html">Path</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_nonnullablekeys.html">NonNullableKeys</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_paths.html">Paths</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_nullable.html">Nullable</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_pick.html">Pick</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_nullablekeys.html">NullableKeys</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_readonly.html">Readonly</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_objectof.html">ObjectOf</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_readonlykeys.html">ReadonlyKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_omit.html">Omit</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_record.html">Record</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_optional.html">Optional</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_replace.html">Replace</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_optionalkeys.html">OptionalKeys</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_required.html">Required</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_overwrite.html">Overwrite</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_requiredkeys.html">RequiredKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_partial.html">Partial</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_select.html">Select</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_patch.html">Patch</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_selectkeys.html">SelectKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_patchall.html">PatchAll</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_undefinable.html">Undefinable</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_path.html">Path</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_undefinablekeys.html">UndefinableKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_paths.html">Paths</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_unionize.html">Unionize</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_pick.html">Pick</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_unionof.html">UnionOf</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_pop.html">Pop</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_update.html">Update</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_prepend.html">Prepend</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_writable.html">Writable</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_readonly.html">Readonly</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/object_writablekeys.html">WritableKeys</a><br /> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_readonlykeys.html">ReadonlyKeys</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_remove.html">Remove</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_repeat.html">Repeat</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_replace.html">Replace</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_required.html">Required</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_requiredkeys.html">RequiredKeys</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_reverse.html">Reverse</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_select.html">Select</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_selectkeys.html">SelectKeys</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_shortest.html">Shortest</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_tail.html">Tail</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_take.html">Take</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_undefinable.html">Undefinable</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_undefinablekeys.html">UndefinableKeys</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_unionize.html">Unionize</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_unionof.html">UnionOf</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_unnest.html">UnNest</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_update.html">Update</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_writable.html">Writable</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_writablekeys.html">WritableKeys</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_zip.html">Zip</a>
              </p>
              
              <p>
                <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/modules/list_zipobj.html">ZipObj</a>
              </p>
              
              <h3 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-archives-" class="anchor" aria-hidden="true" href="#archives-"></a>Archives ⤢<br />
              </h3>
              
              <blockquote>
                <p>
                  <strong><code>EXAMPLE</code></strong> <a rel="nofollow noopener" target="_blank" href="https://millsp.github.io/ts-toolbelt/4.2.1/">https://millsp.github.io/ts-toolbelt/4.2.1/</a>
                </p>
              </blockquote>
              
              <h2 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-good-to-know-" class="anchor" aria-hidden="true" href="#good-to-know-"></a>Good to Know ⤢<br />
              </h2>
              
              <p>
                In this wiki, you will find some extra resources for your learning, and<br /> understanding.<br /> <strong>Are you missing something?</strong> Participate to the open-wiki by posting your<br /> questions.
              </p>
              
              <h2 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-running-tests" class="anchor" aria-hidden="true" href="#running-tests"></a>Running tests
              </h2>
              
              <h3 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-for-this-project" class="anchor" aria-hidden="true" href="#for-this-project"></a>For this project
              </h3>
              
              <p>
                To run the <code>lint</code> & <code>type</code> tests, simply run:
              </p>
              
              <pre>npm test</pre>
              
              <h3 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-for-your-project" class="anchor" aria-hidden="true" href="#for-your-project"></a>For your project
              </h3>
              
              <p>
                Want to test your own types? Let&#8217;s get started:
              </p>
              
              <pre>import {Number, Test} from "ts-toolbelt"

const {checks, check} = Test

checks([ check<Number.Add<1, 30>, 31, Test.Pass>(), check<Number.Add<5, -3>, 2, Test.Pass>(), ])

              <blockquote>
                <p>
                  <strong><code>TIP</code></strong> Place it in a file that won&#8217;t be executed, it&#8217;s just for TypeScript<br /> to test types.
                </p>
              </blockquote>
              
              <h3 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-continuous-integration" class="anchor" aria-hidden="true" href="#continuous-integration"></a>Continuous Integration
              </h3>
              
              <p>
                The releases are done with Travis CI in stages & whenever a branch or PR is<br /> pushed:
              </p>
              
              <ul dir="auto">
                <li>
                  Tests are run with <code>npm test</code>
                </li>
                <li>
                  Tests against<br /> DefinitelyTyped
                </li>
                <li>
                  Releases to npm@[branch-name]
                </li>
              </ul>
              
              <h2 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-compatibility" class="anchor" aria-hidden="true" href="#compatibility"></a>Compatibility
              </h2>
              
              <p>
                The project is maintained to adapt to the constant changes of<br /> TypeScript:
              </p>
              
              <p>
                ts-toolbelt<br /> typescript
              </p>
              
              <p>
                9.x.x<br /> ^4.1.x
              </p>
              
              <p>
                Major version numbers will upgrade whenever TypeScript had breaking changes.<br /> Otherwise, the release versions will naturally follow the semantic versioning.
              </p>
              
              <h2 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-whats-next" class="anchor" aria-hidden="true" href="#whats-next"></a>What&#8217;s next
              </h2>
              
              <ul dir="auto">
                <li>
                  Automated performance tests</p> <pre># performance is checked manually with 

npx tsc –noEmit –extendedDiagnostics

                <li>
                  Need to write more examples
                </li>
              </ul>
              
              <h2 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-related-projects" class="anchor" aria-hidden="true" href="#related-projects"></a>Related Projects
              </h2>
              
              <p>
                <strong>Name</strong><br /> <strong>Intro</strong>
              </p>
              
              <p>
                <code>eledoc</code>
              </p>
              
              <p>
                🌒 A material dark theme for TypeDoc.
              </p>
              
              <p>
                <code>material-candy</code>
              </p>
              
              <p>
                🍬 A vscode theme to uplift your mood, stay happy and focused.
              </p>
              
              <p>
                <code>utility-types</code><br /> Collection of utility types, complementing TypeScript built-in mapped types and aliases.
              </p>
              
              <h2 dir="auto">
                <a rel="nofollow noopener" target="_blank" id="user-content-license" class="anchor" aria-hidden="true" href="#license"></a>License
              </h2>