import { Data } from '../component'; declare type BailTypes = Function | Map | Set | WeakMap | WeakSet; export interface Ref { value: T; } export declare type UnwrapRef = T extends Ref ? UnwrapRef2 : T extends BailTypes ? T : T extends object ? { [K in keyof T]: UnwrapRef2; } : T; declare type UnwrapRef2 = T extends Ref ? UnwrapRef3 : T extends BailTypes ? T : T extends object ? { [K in keyof T]: UnwrapRef3; } : T; declare type UnwrapRef3 = T extends Ref ? UnwrapRef4 : T extends BailTypes ? T : T extends object ? { [K in keyof T]: UnwrapRef4; } : T; declare type UnwrapRef4 = T extends Ref ? UnwrapRef5 : T extends BailTypes ? T : T extends object ? { [K in keyof T]: UnwrapRef5; } : T; declare type UnwrapRef5 = T extends Ref ? UnwrapRef6 : T extends BailTypes ? T : T extends object ? { [K in keyof T]: UnwrapRef6; } : T; declare type UnwrapRef6 = T extends Ref ? UnwrapRef7 : T extends BailTypes ? T : T extends object ? { [K in keyof T]: UnwrapRef7; } : T; declare type UnwrapRef7 = T extends Ref ? UnwrapRef8 : T extends BailTypes ? T : T extends object ? { [K in keyof T]: UnwrapRef8; } : T; declare type UnwrapRef8 = T extends Ref ? UnwrapRef9 : T extends BailTypes ? T : T extends object ? { [K in keyof T]: UnwrapRef9; } : T; declare type UnwrapRef9 = T extends Ref ? UnwrapRef10 : T extends BailTypes ? T : T extends object ? { [K in keyof T]: UnwrapRef10; } : T; declare type UnwrapRef10 = T extends Ref ? V : T; interface RefOption { get(): T; set?(x: T): void; } declare class RefImpl implements Ref { value: T; constructor({ get, set }: RefOption); } export declare function createRef(options: RefOption): RefImpl; declare type RefValue = T extends Ref ? V : UnwrapRef; export declare function ref(): Ref; export declare function ref>(raw: T): Ref; export declare function ref>(raw: T | null): Ref; export declare function isRef(value: any): value is Ref; declare type Refs = { [K in keyof Data]: Data[K] extends Ref ? Ref : Ref; }; export declare function toRefs(obj: T): Refs; export {};