export function isDefined(t: T | undefined): t is T { return t !== undefined } export function toEnum(...args: K[]): { [P in K]: P } { const result = {} as { [P in K]: P } args.forEach(k => result[k] = k) return result } export type Ordinal = number | string | Date type EnumObject = { [key: string]: number | string }; type EnumObjectEnum = E extends { [key: string]: infer ET | string } ? ET : never; export function getEnumValues(enumObject: E): EnumObjectEnum[] { return Object.keys(enumObject) .filter(key => Number.isNaN(Number(key))) .map(key => enumObject[key] as EnumObjectEnum) } export const AlwaysTrueTypeGuard = (e: Err): e is Err => true /** * @see ErrorBox */ export type Primitive = string | number | boolean