import { expectTypeOf } from 'vitest' import type { VNode } from 'vue' /** * Expect the type of a component emit payload. */ export function expectEmitPayloadType>(_event: E, _cb: () => T) { return expectTypeOf[E]>>() } /** * Expect the type of a slot props. */ export function expectSlotProps>(_name: S, _cb: () => T) { return expectTypeOf[S]>() } type Ctx = V extends { __ctx?: infer C } ? NonNullable : never type Slots = Ctx extends { slots: infer S } ? { [K in keyof S as S[K] extends never ? never : K]: S[K] extends (props: infer P) => any ? P : never } : never type Events = Ctx extends { props: infer Props } ? { [K in keyof Props as K extends `on${infer E}${infer Rest}` ? `${Lowercase}${Rest}` : never]: NonNullable extends (...args: infer P) => any ? P : never } : never