import { App, Plugin } from "vue"; type SFCWithInstall = T & Plugin; export const withInstall = >( main: T, extra?: E ) => { (main as SFCWithInstall).install = (app: App) => { for (const comp of [main, ...Object.values(extra ?? {})]) { app.component(comp.name, comp); } }; if (extra) { for (const [compName, comp] of Object.entries(extra)) { (main as Record)[compName] = comp; } } // 将 T 断言为具体的类型 T & plugin & Record return main as SFCWithInstall & E; };