export declare type Maybe = Option | undefined; export declare type Option = T | null; export declare type Table = { [key: string]: T; }; export interface Class { new (...args: any[]): T; } export declare namespace Class { function cast(constructor: Class, variable: string, value: any): T; function tryCast(constructor: Class, value: any): Option; } export declare function assert(condition: boolean, message?: string, ...variables: any): void; export declare function bail(message: string, ...variables: any[]): never; export declare function expect(value: Maybe, message?: string, ...variables: any): T; export declare function findMap(items: Iterable, fn: (item: T) => Maybe): Maybe; export declare function filterMapValues(items: Table, fn: (item: T) => Maybe): Table; export declare function warn(message: string, ...variables: any): void; export declare function unreachable(): never;