A library of reusable common types for TypeScript projects
type AnyRecord = Record<string, any>
// Describes an object without properties
type EmptyObject = { [key: string]: never; [key: number]: never }
interface Class<T> extends Function {
new(...args: any[]): T
}
type Enum<E> = Record<keyof E, number | string> & { [key: number]: string }
type Primitive = boolean | number | string;
// Constructs a type that matches any serializable value
export type AsJsonValue<T> =
T extends JsonPrimitive ? T :
T extends Function ? never :
T extends Array<unknown> ? AsJsonArray<T> :
T extends object ? AsJsonMap<T> :
never;
// Constructs a type that matches any serializable array
export type AsJsonArray<T> = Array<AsJsonValue<UnpackedArray<T>>>
// Constructs a type that matches any serializable object map
export type AsJsonMap<T> =
T extends Array<unknown> ? never :
{[K in keyof T]: AsJsonValue<T[K]> };
interface DefiniteJsonArray extends Array<DefiniteJsonValue> {}
type DefiniteJsonMap = {
[key: string]: DefiniteJsonArray | DefiniteJsonMap | JsonPrimitive;
}
type DefiniteJsonValue = DefiniteJsonArray | DefiniteJsonMap | JsonPrimitive;
interface JsonArray extends Array<JsonValue> {}
type JsonMap = {
[key: string]: JsonArray | JsonMap | JsonPrimitive | undefined;
}
type JsonPrimitive = boolean | number | string | null;
type JsonValue = JsonArray | JsonMap | JsonPrimitive | undefined;
These types provide semantic value only. (Until TypeScript allows pattern-matching, the patterns these types imply will not be enforced.)
type Email = string
type Integer = number
type Json = string
type Timestamp = Integer
type Url = string
ArrayItems<A>
: constructs a type that is the union of all items in array A
AtLeastOne<T>
: constructs a type that requires at least one property of T
ExactlyOne<T>
: constructs a type that requires exactly one property of T
Maybe<T>
: constructs a type that allows T
, null
, or undefined
MaybeNull<T>
: constructs a type that allows T
or null
MaybeReadOnly<T>
: constructs a type that allows T[]
or readonly T[]
MaybeUndefined<T>
: constructs a type that allows T
or undefined
ObjectEntries<O>
: constructs a type that is the union of the types of all entries in object O
ObjectKeys<O>
: constructs a type that is the union of all keys in object O
ObjectValues<O, K?>
: constructs a type that is the union of all values in object O
, or, if K
is provided, of all values mapped to keys K
in object O
PromisedReturnType<F>
: obtains the promised return type of function F
Require<T, Required>
[DEPRECATED in favor of RequireProps
]: constructs a type that makes the
Required
properties of T
required
RequireProps<T, Required>
: constructs a type that makes the Required
properties of T
required
UnpackedArray<T>
: constructs a type that is the union of the types of the items in an array of type T