]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
types(internal): provide internal options for using `$el` type in language tools...
author山吹色御守 <85992002+KazariEX@users.noreply.github.com>
Thu, 5 Sep 2024 12:58:13 +0000 (20:58 +0800)
committerGitHub <noreply@github.com>
Thu, 5 Sep 2024 12:58:13 +0000 (20:58 +0800)
packages-private/dts-test/defineComponent.test-d.tsx
packages/runtime-core/src/apiDefineComponent.ts
packages/runtime-core/src/componentPublicInstance.ts

index 6b9144bf297f56e0eb80b43695d7769a88d055e7..9b4c184719c089c8765167ed3131f47e6b730bd2 100644 (file)
@@ -1822,6 +1822,15 @@ describe('__typeRefs backdoor, object syntax', () => {
   expectType<number>(refs.child.$refs.foo)
 })
 
+describe('__typeEl backdoor', () => {
+  const Comp = defineComponent({
+    __typeEl: {} as HTMLAnchorElement,
+  })
+  const c = new Comp()
+
+  expectType<HTMLAnchorElement>(c.$el)
+})
+
 defineComponent({
   props: {
     foo: [String, null],
index 5a5f56fe6f7ac11a0472594c5e0280317b8b38d5..138f185fca2bce89e6a58cf6da049db3cf0ffb70 100644 (file)
@@ -68,6 +68,7 @@ export type DefineComponent<
   Provide extends ComponentProvideOptions = ComponentProvideOptions,
   MakeDefaultsOptional extends boolean = true,
   TypeRefs extends Record<string, unknown> = {},
+  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<string, unknown> = {},
+  TypeEl extends Element = any,
 >(
   options: {
     props?: (RuntimePropsOptions & ThisType<void>) | 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<InferredProps, ResolvedEmits>,
     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
index 5ba7c34cdfc4de54be74722f7e914a692d29ed10..e9e7770ebd988ac2c8ac2b43979d5c9351916cf9 100644 (file)
@@ -233,6 +233,7 @@ export type CreateComponentPublicInstanceWithMixins<
   Directives extends Record<string, Directive> = {},
   Exposed extends string = string,
   TypeRefs extends Data = {},
+  TypeEl extends Element = any,
   Provide extends ComponentProvideOptions = ComponentProvideOptions,
   // mixin inference
   PublicMixin = IntersectionMixin<Mixin> & IntersectionMixin<Extends>,
@@ -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<E>
-  $el: any
+  $el: TypeEl
   $options: Options & MergedComponentOptionsOverride
   $forceUpdate: () => void
   $nextTick: typeof nextTick