Commit 92cc6036801085778dca58345a4c6a2b4c06f4ef
Committed by
GitHub
1 parent
d3ec7a58
chore: fix type (#2516)
Showing
1 changed file
with
23 additions
and
7 deletions
src/utils/index.ts
1 | 1 | import type { RouteLocationNormalized, RouteRecordNormalized } from 'vue-router'; |
2 | -import type { App, Plugin } from 'vue'; | |
2 | +import type { App, Component } from 'vue'; | |
3 | 3 | |
4 | 4 | import { unref } from 'vue'; |
5 | 5 | import { isObject } from '/@/utils/is'; |
... | ... | @@ -57,7 +57,7 @@ export function openWindow( |
57 | 57 | } |
58 | 58 | |
59 | 59 | // dynamic use hook props |
60 | -export function getDynamicProps<T, U>(props: T): Partial<U> { | |
60 | +export function getDynamicProps<T extends Record<string, unknown>, U>(props: T): Partial<U> { | |
61 | 61 | const ret: Recordable = {}; |
62 | 62 | |
63 | 63 | Object.keys(props).map((key) => { |
... | ... | @@ -82,13 +82,29 @@ export function getRawRoute(route: RouteLocationNormalized): RouteLocationNormal |
82 | 82 | }; |
83 | 83 | } |
84 | 84 | |
85 | -export const withInstall = <T>(component: T, alias?: string) => { | |
86 | - const comp = component as any; | |
87 | - comp.install = (app: App) => { | |
88 | - app.component(comp.name || comp.displayName, component); | |
85 | +// https://github.com/vant-ui/vant/issues/8302 | |
86 | +type EventShim = { | |
87 | + new (...args: any[]): { | |
88 | + $props: { | |
89 | + onClick?: (...args: any[]) => void; | |
90 | + }; | |
91 | + }; | |
92 | +}; | |
93 | + | |
94 | +export type WithInstall<T> = T & { | |
95 | + install(app: App): void; | |
96 | +} & EventShim; | |
97 | + | |
98 | +export type CustomComponent = Component & { displayName?: string }; | |
99 | + | |
100 | +export const withInstall = <T extends CustomComponent>(component: T, alias?: string) => { | |
101 | + (component as Record<string, unknown>).install = (app: App) => { | |
102 | + const compName = component.name || component.displayName; | |
103 | + if (!compName) return; | |
104 | + app.component(compName, component); | |
89 | 105 | if (alias) { |
90 | 106 | app.config.globalProperties[alias] = component; |
91 | 107 | } |
92 | 108 | }; |
93 | - return component as T & Plugin; | |
109 | + return component as WithInstall<T>; | |
94 | 110 | }; | ... | ... |