import { App } from 'vue'; import { camelize } from './format/string'; // https://github.com/youzan/vant/issues/8302 type EventShim = { new (...args: any[]): { $props: { onClick?: (...args: any[]) => void; }; }; }; export type WithInstall = T & { install(app: App): void; } & EventShim; // using any here because tsc will generate some weird results when using generics export function withInstall(options: any): WithInstall { (options as Record).install = (app: App) => { const { name } = options as any; app.component(name, options); app.component(camelize(`-${name}`), options); }; return options; }