types(internal): provide internal options for using `$el` type in language tools (#11814)

This commit is contained in:
山吹色御守 2024-09-05 20:58:13 +08:00 committed by GitHub
parent 3c0d531fa7
commit 7a64b6734d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 24 additions and 4 deletions

View File

@ -1822,6 +1822,15 @@ describe('__typeRefs backdoor, object syntax', () => {
expectType<number>(refs.child.$refs.foo) expectType<number>(refs.child.$refs.foo)
}) })
describe('__typeEl backdoor', () => {
const Comp = defineComponent({
__typeEl: {} as HTMLAnchorElement,
})
const c = new Comp()
expectType<HTMLAnchorElement>(c.$el)
})
defineComponent({ defineComponent({
props: { props: {
foo: [String, null], foo: [String, null],

View File

@ -68,6 +68,7 @@ export type DefineComponent<
Provide extends ComponentProvideOptions = ComponentProvideOptions, Provide extends ComponentProvideOptions = ComponentProvideOptions,
MakeDefaultsOptional extends boolean = true, MakeDefaultsOptional extends boolean = true,
TypeRefs extends Record<string, unknown> = {}, TypeRefs extends Record<string, unknown> = {},
TypeEl extends Element = any,
> = ComponentPublicInstanceConstructor< > = ComponentPublicInstanceConstructor<
CreateComponentPublicInstanceWithMixins< CreateComponentPublicInstanceWithMixins<
Props, Props,
@ -86,7 +87,8 @@ export type DefineComponent<
LC & GlobalComponents, LC & GlobalComponents,
Directives & GlobalDirectives, Directives & GlobalDirectives,
Exposed, Exposed,
TypeRefs TypeRefs,
TypeEl
> >
> & > &
ComponentOptionsBase< ComponentOptionsBase<
@ -214,6 +216,7 @@ export function defineComponent<
: { [key in RuntimePropsKeys]?: any } : { [key in RuntimePropsKeys]?: any }
: TypeProps, : TypeProps,
TypeRefs extends Record<string, unknown> = {}, TypeRefs extends Record<string, unknown> = {},
TypeEl extends Element = any,
>( >(
options: { options: {
props?: (RuntimePropsOptions & ThisType<void>) | RuntimePropsKeys[] props?: (RuntimePropsOptions & ThisType<void>) | RuntimePropsKeys[]
@ -229,6 +232,10 @@ export function defineComponent<
* @private for language-tools use only * @private for language-tools use only
*/ */
__typeRefs?: TypeRefs __typeRefs?: TypeRefs
/**
* @private for language-tools use only
*/
__typeEl?: TypeEl
} & ComponentOptionsBase< } & ComponentOptionsBase<
ToResolvedProps<InferredProps, ResolvedEmits>, ToResolvedProps<InferredProps, ResolvedEmits>,
SetupBindings, SetupBindings,
@ -289,7 +296,8 @@ export function defineComponent<
// MakeDefaultsOptional - if TypeProps is provided, set to false to use // MakeDefaultsOptional - if TypeProps is provided, set to false to use
// user props types verbatim // user props types verbatim
unknown extends TypeProps ? true : false, unknown extends TypeProps ? true : false,
TypeRefs TypeRefs,
TypeEl
> >
// implementation, close to no-op // implementation, close to no-op

View File

@ -233,6 +233,7 @@ export type CreateComponentPublicInstanceWithMixins<
Directives extends Record<string, Directive> = {}, Directives extends Record<string, Directive> = {},
Exposed extends string = string, Exposed extends string = string,
TypeRefs extends Data = {}, TypeRefs extends Data = {},
TypeEl extends Element = any,
Provide extends ComponentProvideOptions = ComponentProvideOptions, Provide extends ComponentProvideOptions = ComponentProvideOptions,
// mixin inference // mixin inference
PublicMixin = IntersectionMixin<Mixin> & IntersectionMixin<Extends>, PublicMixin = IntersectionMixin<Mixin> & IntersectionMixin<Extends>,
@ -277,7 +278,8 @@ export type CreateComponentPublicInstanceWithMixins<
I, I,
S, S,
Exposed, Exposed,
TypeRefs TypeRefs,
TypeEl
> >
export type ExposedKeys< export type ExposedKeys<
@ -302,6 +304,7 @@ export type ComponentPublicInstance<
S extends SlotsType = {}, S extends SlotsType = {},
Exposed extends string = '', Exposed extends string = '',
TypeRefs extends Data = {}, TypeRefs extends Data = {},
TypeEl extends Element = any,
> = { > = {
$: ComponentInternalInstance $: ComponentInternalInstance
$data: D $data: D
@ -315,7 +318,7 @@ export type ComponentPublicInstance<
$parent: ComponentPublicInstance | null $parent: ComponentPublicInstance | null
$host: Element | null $host: Element | null
$emit: EmitFn<E> $emit: EmitFn<E>
$el: any $el: TypeEl
$options: Options & MergedComponentOptionsOverride $options: Options & MergedComponentOptionsOverride
$forceUpdate: () => void $forceUpdate: () => void
$nextTick: typeof nextTick $nextTick: typeof nextTick