@fesjs/fes-design
Version:
fes-design for PC
25 lines (24 loc) • 1.94 kB
TypeScript
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 {};