/** The most permissive object key type. */ export type ObjectKey = number | string | symbol; type AssertEmptyObjectOptionsT = { noRuntimeCheck?: boolean; }; /** Asserts given object is empty, both compile- and run-time. */ export declare function assertEmptyObject(object: Record, { noRuntimeCheck }?: AssertEmptyObjectOptionsT): void; /** * Validates compile-time that the type T extends Base, and returns T. * * BEWARE: In the case Base has some optional fields missing in T, T still * extends Base (as "extends" means T is assignable to Base)! The Implements * util below also checks that T has all optional fields defined in Base. */ export type Extends = T; /** * Validates compile-time that the type T extends (is assignable to) the type * Base, and also that it has defined all (if any) optional fields defined in * the Base. Returns T if the validation passes. */ export type Implements extends Required ? Base : Required> = T; export {};