export type Requirement = (r: R) => T; export type RequirementGroup = { [key: string]: Requirement; }; export type RequirementProvided> = ReturnType; export type RequirementGroupProvided> = { [P in keyof G]: RequirementProvided; }; /** * establish a pattern for creating many things that have a common requirement. * - `const contextual = requirement()>` * - now you can use `contextual` as a template for creating things that require context * - `const MyView = contextual(context => flipview())` * - in that example, the requirement enforces the types for context and the view */ export declare function requirement(): (fun: Requirement) => Requirement; export declare namespace requirement { var provide: (r: R) => >(group: G) => RequirementGroupProvided; }