pb.types
v1.2.0
Published
Utility types like Equal, Intersect, Identity and more.
Readme
pb.types
Installation
npm install pb.typesRequirements
typescript@>=5.0.0tsconfig.json > "compilerOptions" > { "strict": true }
API
- More information available as jsdoc strings in linked source files below.
Expect,Equal,NotEqual
import type { Expect, Equal, NotEqual } from "pb.types";
const result = JSON.stringify({});
!0 as Expect<Equal<typeof result, string>>;
!0 as Expect<NotEqual<typeof result, number>>;Disposer
import type { Disposer } from "pb.types";
function subscribe(): Disposer {
// Start listener/subscription.
return () => {
// Stop listener/subscription.
};
}
const disposer = subscribe();
// ^ () => voidModify
import type { Modify } from "pb.types";
type Props = {
label: string; // (required)
onClick?: () => void; // (optional)
};
function Component(
props: Modify<Props, { required: "onClick"; optional: "label" }>,
) {
props.label;
// ^ string | undefined (optional)
props.onClick;
// ^ () => void (required)
}ArrayItem
import type { ArrayItem } from "pb.types";
type Item = ArrayItem<Array<string>>;
// ^ stringMutable
import type { Mutable } from "pb.types";
type MutableArray = Mutable<ReadonlyArray<number>>;
// ^ Array<number>
type MutableSet = Mutable<ReadonlySet<number>>;
// ^ Set<number>
type MutableMap = Mutable<ReadonlyMap<string, number>>;
// ^ Map<string, number>
type MutableObject = Mutable<Readonly<{ foo: string; bar: number }>>;
// ^ { foo: string; bar: number; }Intersect
import type { Intersect } from "pb.types";
type Example = { A: true } | { B: true } | { C: true };
type Result = Intersect<Example>;
// ^ { A: true } & { B: true } & { C: true }
// ^ { A: true; B: true; C: true }Identity
import type { Identity } from "pb.types";
const value = Object.assign({ A: true }, { B: true });
// ^ { A: boolean } & { B: boolean }
type _Result = Identity<typeof value>;
// ^ { A: boolean; B: boolean }branch
import { branch } from "pb.types";
void function example(): string | number | undefined {
if (branch()) {
return "abc";
}
if (branch()) {
return 12345;
}
return undefined;
};