import { ObservableSeed, Property, PropertySeed, Scope } from "./abstractions"; export declare type GenericObjectTemplate> = { [K in keyof T]: T[K] extends ObservableSeed ? T[K] extends O ? I : never : T[K] extends Record ? GenericObjectTemplate : T[K] extends Array ? GenericArrayTemplate : T[K]; }; export declare type GenericArrayTemplate> = Array ? T extends O ? I : never : T extends Record ? GenericObjectTemplate : T>; export declare type GenericCombinedTemplate> = T extends Record ? GenericObjectTemplate : T extends Array ? GenericArrayTemplate : T extends ObservableSeed ? T extends O ? I2 : never : T; export declare function combineTemplate(template: T): Property>>; export declare function combineTemplateS(template: T, scope: Scope): Property | Property>>; export declare function combineTemplateS(template: T): PropertySeed | Property>>; export declare function each(xs: any, f: (key: string, x: A) => any): void;