/* eslint-disable */ /** * @description A tool for normalizing grammatical structures * @author 阿怪 * @date 2023/6/16 11:25 * @version v1.0.0 * * 江湖的业务千篇一律,复杂的代码好几百行。 */ import { Ref } from 'vue'; type OptionsEmpty = undefined; type IsAllUndefined = T extends [infer H, ...infer R] ? H extends undefined ? IsAllUndefined : false : true; interface OptionsNotEmpty { props: Required

; value: { [K in keyof V]: Ref; }; event: E; } type CoreArguments = keyof OptionsNotEmpty; type AnyArguments = { [K in CoreArguments]?: any } type DefinedKeys = { [K in keyof T]: T[K] extends undefined ? never : K }[keyof T]; type UndefinedKeys = Exclude>; export type OptionsKeys< A extends AnyArguments, P, V, E, DK extends string | number | symbol = DefinedKeys, UK extends string | number | symbol = UndefinedKeys > = { [K in DK & keyof OptionsNotEmpty]: OptionsNotEmpty[K]; } & { [K in UK & keyof OptionsNotEmpty]-?: OptionsNotEmpty[K]; } export type Options< K extends AnyArguments, P = K['props'], V = K['value'], E = K['event'], > = IsAllUndefined<[P, V, E]> extends true ? OptionsEmpty : OptionsKeys;