From: 山吹色御守 <85992002+KazariEX@users.noreply.github.com> Date: Thu, 5 Sep 2024 12:58:13 +0000 (+0800) Subject: types(internal): provide internal options for using `$el` type in language tools... X-Git-Tag: v3.5.2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7a64b6734d2e85bfea024b1e9d8ae1c66ba85a8f;p=thirdparty%2Fvuejs%2Fcore.git types(internal): provide internal options for using `$el` type in language tools (#11814) --- diff --git a/packages-private/dts-test/defineComponent.test-d.tsx b/packages-private/dts-test/defineComponent.test-d.tsx index 6b9144bf29..9b4c184719 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 5a5f56fe6f..138f185fca 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 5ba7c34cdf..e9e7770ebd 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