interface OneofWrapper<T> {
    item: T;
}
interface Oneof<T = unknown> {
    oneof?: T;
    value?: unknown;
}
export declare function oneof<T extends Oneof<unknown>, TValue extends string, Result>(base: T | undefined, key: (TValue extends T['oneof'] ? TValue : T['oneof']) | undefined, fn: ((v: OneofWrapper<Extract<T, Oneof<TValue>>>['item']['value']) => Result) | undefined): Result | undefined;
export declare function oneof<T extends Oneof<unknown>, TValue extends string, Result>(base?: T | undefined, key?: (TValue extends T['oneof'] ? TValue : T['oneof']) | undefined): OneofWrapper<Extract<T, Oneof<TValue>>>['item']['value'] | undefined;
export declare const oneis: <T extends Oneof<unknown>, TValue extends string>(base?: T | undefined, key?: (TValue extends T["oneof"] ? TValue : T["oneof"]) | undefined) => base is Extract<T, Oneof<TValue>>;
export {};
