From 7a64b6734d2e85bfea024b1e9d8ae1c66ba85a8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=B1=E5=90=B9=E8=89=B2=E5=BE=A1=E5=AE=88?= <85992002+KazariEX@users.noreply.github.com> Date: Thu, 5 Sep 2024 20:58:13 +0800 Subject: [PATCH] types(internal): provide internal options for using `$el` type in language tools (#11814) --- packages-private/dts-test/defineComponent.test-d.tsx | 9 +++++++++ packages/runtime-core/src/apiDefineComponent.ts | 12 ++++++++++-- packages/runtime-core/src/componentPublicInstance.ts | 7 +++++-- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/packages-private/dts-test/defineComponent.test-d.tsx b/packages-private/dts-test/defineComponent.test-d.tsx index 6b9144bf2..9b4c18471 100644 --- a/packages-private/dts-test/defineComponent.test-d.tsx +++ b/packages-private/dts-test/defineComponent.test-d.tsx @@ -1822,6 +1822,15 @@ describe('__typeRefs backdoor, object syntax', () => { expectType(refs.child.$refs.foo) }) +describe('__typeEl backdoor', () => { + const Comp = defineComponent({ + __typeEl: {} as HTMLAnchorElement, + }) + const c = new Comp() + + expectType(c.$el) +}) + defineComponent({ props: { foo: [String, null], diff --git a/packages/runtime-core/src/apiDefineComponent.ts b/packages/runtime-core/src/apiDefineComponent.ts index 5a5f56fe6..138f185fc 100644 --- a/packages/runtime-core/src/apiDefineComponent.ts +++ b/packages/runtime-core/src/apiDefineComponent.ts @@ -68,6 +68,7 @@ export type DefineComponent< Provide extends ComponentProvideOptions = ComponentProvideOptions, MakeDefaultsOptional extends boolean = true, TypeRefs extends Record = {}, + TypeEl extends Element = any, > = ComponentPublicInstanceConstructor< CreateComponentPublicInstanceWithMixins< Props, @@ -86,7 +87,8 @@ export type DefineComponent< LC & GlobalComponents, Directives & GlobalDirectives, Exposed, - TypeRefs + TypeRefs, + TypeEl > > & ComponentOptionsBase< @@ -214,6 +216,7 @@ export function defineComponent< : { [key in RuntimePropsKeys]?: any } : TypeProps, TypeRefs extends Record = {}, + TypeEl extends Element = any, >( options: { props?: (RuntimePropsOptions & ThisType) | RuntimePropsKeys[] @@ -229,6 +232,10 @@ export function defineComponent< * @private for language-tools use only */ __typeRefs?: TypeRefs + /** + * @private for language-tools use only + */ + __typeEl?: TypeEl } & ComponentOptionsBase< ToResolvedProps, SetupBindings, @@ -289,7 +296,8 @@ export function defineComponent< // MakeDefaultsOptional - if TypeProps is provided, set to false to use // user props types verbatim unknown extends TypeProps ? true : false, - TypeRefs + TypeRefs, + TypeEl > // implementation, close to no-op diff --git a/packages/runtime-core/src/componentPublicInstance.ts b/packages/runtime-core/src/componentPublicInstance.ts index 5ba7c34cd..e9e7770eb 100644 --- a/packages/runtime-core/src/componentPublicInstance.ts +++ b/packages/runtime-core/src/componentPublicInstance.ts @@ -233,6 +233,7 @@ export type CreateComponentPublicInstanceWithMixins< Directives extends Record = {}, Exposed extends string = string, TypeRefs extends Data = {}, + TypeEl extends Element = any, Provide extends ComponentProvideOptions = ComponentProvideOptions, // mixin inference PublicMixin = IntersectionMixin & IntersectionMixin, @@ -277,7 +278,8 @@ export type CreateComponentPublicInstanceWithMixins< I, S, Exposed, - TypeRefs + TypeRefs, + TypeEl > export type ExposedKeys< @@ -302,6 +304,7 @@ export type ComponentPublicInstance< S extends SlotsType = {}, Exposed extends string = '', TypeRefs extends Data = {}, + TypeEl extends Element = any, > = { $: ComponentInternalInstance $data: D @@ -315,7 +318,7 @@ export type ComponentPublicInstance< $parent: ComponentPublicInstance | null $host: Element | null $emit: EmitFn - $el: any + $el: TypeEl $options: Options & MergedComponentOptionsOverride $forceUpdate: () => void $nextTick: typeof nextTick