From 8dd9d08209e47a7d9a5654db4fb936b4cbcfc021 Mon Sep 17 00:00:00 2001 From: Sandro Circi Date: Mon, 14 Apr 2025 16:09:20 +0200 Subject: [PATCH] fix(types): improve dynamic slots (#3857) --- playground/app/pages/components/tree.vue | 6 +++--- src/runtime/components/Accordion.vue | 4 ++-- src/runtime/types/utils.ts | 21 ++++++++++++--------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/playground/app/pages/components/tree.vue b/playground/app/pages/components/tree.vue index dcd9570c..356b76f3 100644 --- a/playground/app/pages/components/tree.vue +++ b/playground/app/pages/components/tree.vue @@ -8,11 +8,11 @@ const sizes = Object.keys(theme.variants.size) as Array tv({ extend: tv(theme), ...(appConfig.ui?.accordion || - +
- + {{ item.content }}
diff --git a/src/runtime/types/utils.ts b/src/runtime/types/utils.ts index c436646a..23d2ab44 100644 --- a/src/runtime/types/utils.ts +++ b/src/runtime/types/utils.ts @@ -16,18 +16,21 @@ export type DeepPartial = { [key: string]: O | TightMap } +export type DynamicSlotsKeys = ( + Name extends string + ? Suffix extends string + ? Name | `${Name}-${Suffix}` + : Name + : never +) export type DynamicSlots< T extends { slot?: string }, - S extends string | undefined = undefined, - D extends object = {} + Suffix extends string | undefined = undefined, + ExtraProps extends object = {} > = { - [ - K in T['slot'] as K extends string - ? S extends string - ? (K | `${K}-${S}`) - : K - : never - ]?: (props: { item: Extract } & D) => any + [K in DynamicSlotsKeys]: ( + props: { item: Extract } & ExtraProps + ) => any } export type GetObjectField = MaybeObject extends Record