20 lines
1.0 KiB
TypeScript
20 lines
1.0 KiB
TypeScript
import type { ComponentOptionsBase, ComponentPublicInstance, Ref, UnwrapRef } from 'vue';
|
|
import type { NonEmptyArray, UnionToIntersection } from '../util/index.js';
|
|
/** Omit properties starting with P */
|
|
type OmitPrefix<T, P extends string, E = Extract<keyof T, `${P}${any}`>> = [E] extends [never] ? T : Omit<T, `${P}${any}`>;
|
|
type OmitPrivate<T> = OmitPrefix<T, '$'>;
|
|
/** Omit keyof $props from T */
|
|
type OmitProps<T> = T extends {
|
|
$props: any;
|
|
} ? Omit<T, keyof T['$props']> : T;
|
|
export declare function forwardRefs<T extends {}, U extends NonEmptyArray<Ref<HTMLElement | Omit<ComponentPublicInstance, '$emit' | '$slots'> | undefined>>, UU = {
|
|
[K in keyof U]: NonNullable<UnwrapRef<U[K]>>;
|
|
}[number], UC = {
|
|
[K in keyof U]: OmitPrivate<OmitProps<NonNullable<UnwrapRef<U[K]>>>>;
|
|
}[number], R = T & UnionToIntersection<UC> & {
|
|
_allExposed: T | (UU extends {
|
|
$options: infer O;
|
|
} ? O extends ComponentOptionsBase<any, infer E, any, any, any, any, any, any> ? E : never : never);
|
|
}>(target: T, ...refs: U): R;
|
|
|