import { type WritableComputedRef } from 'vue';
interface UseNormalModelOptions<Props extends Record<string, any>, Key extends keyof Props> {
    prop?: Key;
    isEqual?: boolean;
    deep?: boolean;
    defaultValue?: Props[Key];
}
export declare const useNormalModel: <Props extends Record<string, any>, Key extends "modelValue" | Extract<keyof Props, string> = "modelValue", EventName extends string = string>(props: Props, emit: (eventName: EventName, ...args: any[]) => void, config?: UseNormalModelOptions<Props, Key>) => [WritableComputedRef<Props[Key], Props[Key]>, (val: Props[Key]) => void];
type ArrayOrItem<T> = [T] extends [unknown[]] ? T | T[number] : T[] | T;
/**
 * TODO: 后续优化
 * 使得 useArrayModel 在不传 config 使用 modelValue，且 modelValue 的类型不为数组的情况下，有更友好的类型报错提示
 * 目前在上述情况下，modelValue 的类型被推导为 never，保证了部分场景。
 */
export declare const useArrayModel: <Props extends Record<string, any>, Key_1 extends Extract<"modelValue", keyof { [Key in keyof Props as Props[Key] extends unknown[] ? Key : never]: Props[Key]; }> | Extract<Extract<keyof Props, string>, keyof { [Key in keyof Props as Props[Key] extends unknown[] ? Key : never]: Props[Key]; }> = Extract<"modelValue", keyof { [Key in keyof Props as Props[Key] extends unknown[] ? Key : never]: Props[Key]; }>, EventName extends string = string>(props: Props, emit: (eventName: EventName, ...args: any[]) => void, config?: UseNormalModelOptions<Props, Key_1>) => [WritableComputedRef<Props[Key_1], Props[Key_1]>, (val: ArrayOrItem<Props[Key_1]>) => void];
/**
 * useArrayModel 的返回值
 * 用于 modelValue 混杂了 useNormalModel 类型的情况，用于手动指明 useArrayModel 需要的 modelValue 类型
 */
export type UseArrayModelReturn<ModelValue> = [
    WritableComputedRef<ModelValue>,
    (val: ArrayOrItem<ModelValue>) => void
];
export {};
