瀏覽代碼

chore: fix type (#2516)

luocong2016 2 年之前
父節點
當前提交
92cc603680
共有 1 個文件被更改,包括 23 次插入7 次删除
  1. 23 7
      src/utils/index.ts

+ 23 - 7
src/utils/index.ts

@@ -1,5 +1,5 @@
 import type { RouteLocationNormalized, RouteRecordNormalized } from 'vue-router';
-import type { App, Plugin } from 'vue';
+import type { App, Component } from 'vue';
 
 import { unref } from 'vue';
 import { isObject } from '/@/utils/is';
@@ -57,7 +57,7 @@ export function openWindow(
 }
 
 // dynamic use hook props
-export function getDynamicProps<T, U>(props: T): Partial<U> {
+export function getDynamicProps<T extends Record<string, unknown>, U>(props: T): Partial<U> {
   const ret: Recordable = {};
 
   Object.keys(props).map((key) => {
@@ -82,13 +82,29 @@ export function getRawRoute(route: RouteLocationNormalized): RouteLocationNormal
   };
 }
 
-export const withInstall = <T>(component: T, alias?: string) => {
-  const comp = component as any;
-  comp.install = (app: App) => {
-    app.component(comp.name || comp.displayName, component);
+// https://github.com/vant-ui/vant/issues/8302
+type EventShim = {
+  new (...args: any[]): {
+    $props: {
+      onClick?: (...args: any[]) => void;
+    };
+  };
+};
+
+export type WithInstall<T> = T & {
+  install(app: App): void;
+} & EventShim;
+
+export type CustomComponent = Component & { displayName?: string };
+
+export const withInstall = <T extends CustomComponent>(component: T, alias?: string) => {
+  (component as Record<string, unknown>).install = (app: App) => {
+    const compName = component.name || component.displayName;
+    if (!compName) return;
+    app.component(compName, component);
     if (alias) {
       app.config.globalProperties[alias] = component;
     }
   };
-  return component as T & Plugin;
+  return component as WithInstall<T>;
 };