/** * An object whose all properties have the same type. */ export declare type Dictionary = { [key: string]: T; }; /** * Returns the keys of T that match Dictionary and are not arrays. */ export declare type DictionaryKeyof = Exclude>, KeyOf>; /** * Returns the keys of T that match U. */ export declare type KeyOf = Exclude<{ [K in keyof T]: T[K] extends U ? K : never; }[keyof T], undefined>; /** * An array whose first element is not undefined. */ export declare type NotEmptyArray = [T, ...T[]]; /** * Returns the type of a Dictionary or array values. */ export declare type ValueOf = T extends (infer U)[] ? U : T[keyof T]; /** * Typing wrapper around assert.notStrictEqual() */ export declare function assertNotStrictEqual(actual: T | N, expected: N, message?: string | Error): asserts actual is Exclude; /** * Asserts actual is a single key, not a key array or a key map. */ export declare function assertSingleKey(actual: string | string[] | Dictionary): asserts actual is string; /** * Typing wrapper around Object.keys() */ export declare function objectKeys(object: T): (keyof T)[];