npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

type-zoo

v3.4.1

Published

A menagerie of useful type operators for TypeScript

Downloads

17,547

Readme

Type Zoo Build Status

TypeScript ships with some handy user-definable type operators: Partial, Readonly, Pick and Record. However many other useful operators have been demonstrated in GitHub issue comments and elsewhere. This repository is intended to collect all this folklore in one place, so you can stop copying and pasting these solutions into project after project.

PRs more than welcome! Please note that this library is intended to be fully static, i.e. it has no runtime component, only a type definition file. The idea is that these could all potentially make their way into lib.d.ts at some point.

Installation

yarn add type-zoo

API


ExcludeStrict<T, U extends T>

Exclude from T those types that are assignable to U, where U must exist in T.

Similar to Exclude but requires the exclusion list to be composed of valid members of T.

See: https://github.com/pelotom/type-zoo/issues/37


ExtractStrict<T, U extends T>

Extract from T those types that are assignable to U, where U must exist in T.

Similar to Extract but requires the extraction list to be composed of valid members of T.

See: https://github.com/pelotom/type-zoo/issues/37


NoInfer<T>

Use to prevent a usage of type T from being inferred in other generics.

Example:

declare function assertEqual<T>(actual: T, expected: NoInfer<T>): boolean;

Type T will now only be inferred based on the type of the actual param, and the expected param is required to be assignable to the type of actual. This allows you to give one particular usage of type T full control over how the compiler infers type T.

See: https://github.com/Microsoft/TypeScript/issues/14829#issuecomment-322267089


Omit<T, K extends keyof any>

Drop keys K from T if they are present.

See: https://github.com/Microsoft/TypeScript/issues/12215#issuecomment-377567046


OmitStrict<T, K extends keyof T>

Drop keys K from T, where K must exist in T.

See: https://github.com/Microsoft/TypeScript/issues/12215#issuecomment-377567046


Overwrite<T, U>

Like T & U, but where there are overlapping properties using the type from U only.

See: https://github.com/pelotom/type-zoo/pull/14#discussion_r183527882


Param#<T extends Function> and ParamTypes<T extends Function>

These helpers extract the Parameter-types from Functions.

See: https://github.com/pelotom/type-zoo/issues/22


Pick#<T, K1 in keyof T, K2 in ...>

Like Pick<> but for # of nested levels!

See https://gist.github.com/staltz/368866ea6b8a167fbdac58cddf79c1bf


Public#<T>

Get only the public members of a type or class. When applied to a class T with private members, Public can be implemented.

See https://github.com/Microsoft/TypeScript/issues/18499#issuecomment-429272545

Related Projects

typelevel-ts and typical are two projects with similar goals to this one. The main difference is that those libraries are more focused on advanced type-level computation, whereas Type Zoo is meant to capture more basic type operators which have been proposed as candidates for inclusion in lib.d.ts, or even as first-class language primitives. The idea is that these types will hopefully make their way into the language proper, at which point you can simply stop importing them from type-zoo and be on your merry way.