Преглед изворни кода

fix(types): better typing for direct setup signature of defineComponent (#10357)

close #8604
close #8855
Shean de Montigny-Desautels пре 2 година
родитељ
комит
eadce5b753
1 измењених фајлова са 26 додато и 2 уклоњено
  1. 26 2
      packages/runtime-core/src/apiDefineComponent.ts

+ 26 - 2
packages/runtime-core/src/apiDefineComponent.ts

@@ -89,6 +89,30 @@ export type DefineComponent<
   > &
   PP
 
+type DirectSetupComponent<
+  P extends Record<string, any>,
+  E extends EmitsOptions = {},
+  S extends SlotsType = SlotsType,
+  Props = P & EmitsToProps<E>,
+  PP = PublicProps,
+> = new (
+  props: Props & PP,
+) => CreateComponentPublicInstance<
+  Props,
+  {},
+  {},
+  {},
+  {},
+  ComponentOptionsMixin,
+  ComponentOptionsMixin,
+  E,
+  PP,
+  {},
+  false,
+  {},
+  S
+>
+
 // defineComponent is a utility that is primarily used for type inference
 // when declaring components. Type inference is provided in the component
 // options (provided as the argument). The returned value has artificial types
@@ -111,7 +135,7 @@ export function defineComponent<
     emits?: E | EE[]
     slots?: S
   },
-): (props: Props & EmitsToProps<E>) => any
+): DirectSetupComponent<Props, E, S>
 export function defineComponent<
   Props extends Record<string, any>,
   E extends EmitsOptions = {},
@@ -127,7 +151,7 @@ export function defineComponent<
     emits?: E | EE[]
     slots?: S
   },
-): (props: Props & EmitsToProps<E>) => any
+): DirectSetupComponent<Props, E, S>
 
 // overload 2: object format with no props
 // (uses user defined props interface)