diff --git a/src/runtime/composables/useToast.ts b/src/runtime/composables/useToast.ts index 0773ec91..e2f05cf5 100644 --- a/src/runtime/composables/useToast.ts +++ b/src/runtime/composables/useToast.ts @@ -1,8 +1,9 @@ import { ref, nextTick } from 'vue' import { useState } from '#imports' -import type { ToastProps } from '../types' +import type { ToastProps, ToastEmits } from '../types' +import type { EmitsToProps } from '../types/utils' -export interface Toast extends Omit { +export interface Toast extends Omit, EmitsToProps { id: string | number onClick?: (toast: Toast) => void } @@ -38,7 +39,7 @@ export function useToast() { id: generateId(), open: true, ...toast - } + } as Toast queue.push(body) diff --git a/src/runtime/types/utils.ts b/src/runtime/types/utils.ts index 2357fb20..4fc6997b 100644 --- a/src/runtime/types/utils.ts +++ b/src/runtime/types/utils.ts @@ -38,3 +38,9 @@ export type StringOrVNode = | string | VNode | (() => VNode) + +export type EmitsToProps = { + [K in keyof T as `on${Capitalize}`]: T[K] extends [...args: infer Args] + ? (...args: Args) => void + : never +}