UNPKG

@fesjs/fes-design

Version:
25 lines (24 loc) 1.94 kB
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 {};