fix(NavigationMenu): improve generic types (#2482)

Co-authored-by: Benjamin Canac <canacb1@gmail.com>
This commit is contained in:
Yasser Lahbibi
2024-10-29 19:21:35 +01:00
committed by GitHub
parent 03dd1eba7e
commit fc2015bb0e
7 changed files with 71 additions and 24 deletions

View File

@@ -8,6 +8,19 @@ export function expectEmitPayloadType<T extends VNode, E extends keyof Events<T>
return expectTypeOf<NonNullable<Events<T>[E]>>()
}
type Events<T> = T extends { __ctx?: { props: infer Props } } ? {
/**
* Expect the type of a slot props.
*/
export function expectSlotProps<T extends VNode, S extends keyof Slots<T>>(_name: S, _cb: () => T) {
return expectTypeOf<Slots<T>[S]>()
}
type Ctx<V extends VNode> = V extends { __ctx?: infer C } ? NonNullable<C> : never
type Slots<V extends VNode> = Ctx<V> 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<V extends VNode> = Ctx<V> extends { props: infer Props } ? {
[K in keyof Props as K extends `on${infer E}${infer Rest}` ? `${Lowercase<E>}${Rest}` : never]: NonNullable<Props[K]> extends (...args: infer P) => any ? P : never
} : never