]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(types): restore DefineComponent argument order
authorEvan You <yyx990803@gmail.com>
Fri, 20 May 2022 16:53:46 +0000 (00:53 +0800)
committerEvan You <yyx990803@gmail.com>
Fri, 20 May 2022 16:55:51 +0000 (00:55 +0800)
This is necessary for compatibility w/ tsc-generated component types
using DefineComponent.

revert #5416
reopen #3796
fix #5967

packages/runtime-core/src/apiAsyncComponent.ts
packages/runtime-core/src/apiDefineComponent.ts
packages/runtime-core/src/componentOptions.ts
packages/runtime-core/src/componentPublicInstance.ts
test-dts/defineComponent.test-d.tsx

index c9b96607b5f39082f04ee4e4924bc6e53ffa36de..41ccd94a7445faa644aa1ced414eeba1fc727007 100644 (file)
@@ -111,7 +111,7 @@ export function defineAsyncComponent<
     )
   }
 
-  return defineComponent<{}>({
+  return defineComponent({
     name: 'AsyncComponentWrapper',
 
     __asyncLoader: load,
index a086704762a7a5b67de4407a37c496e28ca4d44f..83446346fabe1f4ae2554eaf12b852dd7b1bc6bf 100644 (file)
@@ -6,8 +6,7 @@ import {
   ComponentOptionsWithObjectProps,
   ComponentOptionsMixin,
   RenderFunction,
-  ComponentOptionsBase,
-  ComponentProvideOptions
+  ComponentOptionsBase
 } from './componentOptions'
 import {
   SetupContext,
@@ -41,8 +40,6 @@ export type DefineComponent<
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = {},
   EE extends string = string,
-  Provide extends ComponentProvideOptions = ComponentProvideOptions,
-  RawOptions extends {} = {},
   PP = PublicProps,
   Props = Readonly<
     PropsOrPropOptions extends ComponentPropsOptions
@@ -51,23 +48,22 @@ export type DefineComponent<
   > &
     ({} extends E ? {} : EmitsToProps<E>),
   Defaults = ExtractDefaultPropTypes<PropsOrPropOptions>
-> = RawOptions &
-  ComponentPublicInstanceConstructor<
-    CreateComponentPublicInstance<
-      Props,
-      RawBindings,
-      D,
-      C,
-      M,
-      Mixin,
-      Extends,
-      E,
-      PP & Props,
-      Defaults,
-      true
-    > &
-      Props
+> = ComponentPublicInstanceConstructor<
+  CreateComponentPublicInstance<
+    Props,
+    RawBindings,
+    D,
+    C,
+    M,
+    Mixin,
+    Extends,
+    E,
+    PP & Props,
+    Defaults,
+    true
   > &
+    Props
+> &
   ComponentOptionsBase<
     Props,
     RawBindings,
@@ -78,8 +74,7 @@ export type DefineComponent<
     Extends,
     E,
     EE,
-    Defaults,
-    Provide
+    Defaults
   > &
   PP
 
@@ -109,20 +104,9 @@ export function defineComponent<
   Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = EmitsOptions,
-  EE extends string = string,
-  Provide extends ComponentProvideOptions = ComponentProvideOptions,
-  Options extends ComponentOptionsWithoutProps<
-    Props,
-    RawBindings,
-    D,
-    C,
-    M,
-    Mixin,
-    Extends,
-    E,
-    EE,
-    Provide
-  > = ComponentOptionsWithoutProps<
+  EE extends string = string
+>(
+  options: ComponentOptionsWithoutProps<
     Props,
     RawBindings,
     D,
@@ -131,36 +115,9 @@ export function defineComponent<
     Mixin,
     Extends,
     E,
-    EE,
-    Provide
+    EE
   >
->(
-  options: Options &
-    ComponentOptionsWithoutProps<
-      Props,
-      RawBindings,
-      D,
-      C,
-      M,
-      Mixin,
-      Extends,
-      E,
-      EE,
-      Provide
-    >
-): DefineComponent<
-  Props,
-  RawBindings,
-  D,
-  C,
-  M,
-  Mixin,
-  Extends,
-  E,
-  EE,
-  Provide,
-  Options
->
+): DefineComponent<Props, RawBindings, D, C, M, Mixin, Extends, E, EE>
 
 // overload 3: object format with array props declaration
 // props inferred as { [key in PropNames]?: any }
@@ -174,20 +131,9 @@ export function defineComponent<
   Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = Record<string, any>,
-  EE extends string = string,
-  Provide extends ComponentProvideOptions = ComponentProvideOptions,
-  Options extends ComponentOptionsWithArrayProps<
-    PropNames,
-    RawBindings,
-    D,
-    C,
-    M,
-    Mixin,
-    Extends,
-    E,
-    EE,
-    Provide
-  > = ComponentOptionsWithArrayProps<
+  EE extends string = string
+>(
+  options: ComponentOptionsWithArrayProps<
     PropNames,
     RawBindings,
     D,
@@ -196,23 +142,8 @@ export function defineComponent<
     Mixin,
     Extends,
     E,
-    EE,
-    Provide
+    EE
   >
->(
-  options: Options &
-    ComponentOptionsWithArrayProps<
-      PropNames,
-      RawBindings,
-      D,
-      C,
-      M,
-      Mixin,
-      Extends,
-      E,
-      EE,
-      Provide
-    >
 ): DefineComponent<
   Readonly<{ [key in PropNames]?: any }>,
   RawBindings,
@@ -222,9 +153,7 @@ export function defineComponent<
   Mixin,
   Extends,
   E,
-  EE,
-  Provide,
-  Options
+  EE
 >
 
 // overload 4: object format with object props declaration
@@ -240,20 +169,9 @@ export function defineComponent<
   Mixin extends ComponentOptionsMixin = ComponentOptionsMixin,
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = Record<string, any>,
-  EE extends string = string,
-  Provide extends ComponentProvideOptions = ComponentProvideOptions,
-  Options extends ComponentOptionsWithObjectProps<
-    PropsOptions,
-    RawBindings,
-    D,
-    C,
-    M,
-    Mixin,
-    Extends,
-    E,
-    EE,
-    Provide
-  > = ComponentOptionsWithObjectProps<
+  EE extends string = string
+>(
+  options: ComponentOptionsWithObjectProps<
     PropsOptions,
     RawBindings,
     D,
@@ -262,36 +180,9 @@ export function defineComponent<
     Mixin,
     Extends,
     E,
-    EE,
-    Provide
+    EE
   >
->(
-  options: Options &
-    ComponentOptionsWithObjectProps<
-      PropsOptions,
-      RawBindings,
-      D,
-      C,
-      M,
-      Mixin,
-      Extends,
-      E,
-      EE,
-      Provide
-    >
-): DefineComponent<
-  PropsOptions,
-  RawBindings,
-  D,
-  C,
-  M,
-  Mixin,
-  Extends,
-  E,
-  EE,
-  Provide,
-  Options
->
+): DefineComponent<PropsOptions, RawBindings, D, C, M, Mixin, Extends, E, EE>
 
 // implementation, close to no-op
 export function defineComponent(options: unknown) {
index c482d0519656b9dbe73e401ade8171046ac4226c..0d47e18c4af50c46058bb8377990db71e0205685 100644 (file)
@@ -118,9 +118,8 @@ export interface ComponentOptionsBase<
   Extends extends ComponentOptionsMixin,
   E extends EmitsOptions,
   EE extends string = string,
-  Defaults = {},
-  Provide extends ComponentProvideOptions = ComponentProvideOptions
-> extends LegacyOptions<Props, D, C, M, Mixin, Extends, Provide>,
+  Defaults = {}
+> extends LegacyOptions<Props, D, C, M, Mixin, Extends>,
     ComponentInternalOptions,
     ComponentCustomOptions {
   setup?: (
@@ -226,7 +225,6 @@ export type ComponentOptionsWithoutProps<
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = EmitsOptions,
   EE extends string = string,
-  Provide extends ComponentProvideOptions = ComponentProvideOptions,
   PE = Props & EmitsToProps<E>
 > = ComponentOptionsBase<
   PE,
@@ -238,8 +236,7 @@ export type ComponentOptionsWithoutProps<
   Extends,
   E,
   EE,
-  {},
-  Provide
+  {}
 > & {
   props?: undefined
 } & ThisType<
@@ -256,7 +253,6 @@ export type ComponentOptionsWithArrayProps<
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = EmitsOptions,
   EE extends string = string,
-  Provide extends ComponentProvideOptions = ComponentProvideOptions,
   Props = Readonly<{ [key in PropNames]?: any }> & EmitsToProps<E>
 > = ComponentOptionsBase<
   Props,
@@ -268,8 +264,7 @@ export type ComponentOptionsWithArrayProps<
   Extends,
   E,
   EE,
-  {},
-  Provide
+  {}
 > & {
   props: PropNames[]
 } & ThisType<
@@ -295,7 +290,6 @@ export type ComponentOptionsWithObjectProps<
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = EmitsOptions,
   EE extends string = string,
-  Provide extends ComponentProvideOptions = ComponentProvideOptions,
   Props = Readonly<ExtractPropTypes<PropsOptions>> & EmitsToProps<E>,
   Defaults = ExtractDefaultPropTypes<PropsOptions>
 > = ComponentOptionsBase<
@@ -308,8 +302,7 @@ export type ComponentOptionsWithObjectProps<
   Extends,
   E,
   EE,
-  Defaults,
-  Provide
+  Defaults
 > & {
   props: PropsOptions & ThisType<void>
 } & ThisType<
@@ -409,8 +402,7 @@ interface LegacyOptions<
   C extends ComputedOptions,
   M extends MethodOptions,
   Mixin extends ComponentOptionsMixin,
-  Extends extends ComponentOptionsMixin,
-  Provide extends ComponentProvideOptions = ComponentProvideOptions
+  Extends extends ComponentOptionsMixin
 > {
   compatConfig?: CompatConfig
 
@@ -444,7 +436,7 @@ interface LegacyOptions<
   computed?: C
   methods?: M
   watch?: ComponentWatchOptions
-  provide?: Provide
+  provide?: ComponentProvideOptions
   inject?: ComponentInjectOptions
 
   // assets
index 986a2e79b5586504794d4601cb93962d9a8406bc..1d913673123cb7d8a019be7eefc7bd8e6e1c3b23 100644 (file)
@@ -34,8 +34,7 @@ import {
   OptionTypesKeys,
   resolveMergedOptions,
   shouldCacheAccess,
-  MergedComponentOptionsOverride,
-  ComponentProvideOptions
+  MergedComponentOptionsOverride
 } from './componentOptions'
 import { EmitsOptions, EmitFn } from './componentEmits'
 import { Slots } from './componentSlots'
@@ -151,8 +150,7 @@ export type CreateComponentPublicInstance<
   PublicM extends MethodOptions = UnwrapMixinsType<PublicMixin, 'M'> &
     EnsureNonVoid<M>,
   PublicDefaults = UnwrapMixinsType<PublicMixin, 'Defaults'> &
-    EnsureNonVoid<Defaults>,
-  Provide extends ComponentProvideOptions = ComponentProvideOptions
+    EnsureNonVoid<Defaults>
 > = ComponentPublicInstance<
   PublicP,
   PublicB,
@@ -163,19 +161,7 @@ export type CreateComponentPublicInstance<
   PublicProps,
   PublicDefaults,
   MakeDefaultsOptional,
-  ComponentOptionsBase<
-    P,
-    B,
-    D,
-    C,
-    M,
-    Mixin,
-    Extends,
-    E,
-    string,
-    Defaults,
-    Provide
-  >
+  ComponentOptionsBase<P, B, D, C, M, Mixin, Extends, E, string, Defaults>
 >
 
 // public properties exposed on the proxy, which is used as the render context
index 7412d6db36f1377622ea04a71e25bd009e771a96..30d25436201a09adb55a2836166aa4ef0a2b1baa 100644 (file)
@@ -264,18 +264,6 @@ describe('with object props', () => {
 
   expectType<Component>(MyComponent)
 
-  expectType<typeof props>(MyComponent.props)
-  // @ts-expect-error it should be an object and not any
-  expectError<[]>(MyComponent.props)
-
-  expectType<() => {}>(MyComponent.provide)
-  // @ts-expect-error
-  expectError<[]>(MyComponent.provide)
-
-  expectType<() => null>(MyComponent.render)
-
-  expectType<Function | undefined>(defineComponent({}).render)
-
   // Test TSX
   expectType<JSX.Element>(
     <MyComponent
@@ -1175,3 +1163,24 @@ export default {
     }
   })
 }
+
+// code generated by tsc / vue-tsc, make sure this continues to work
+// so we don't accidentally change the args order of DefineComponent
+declare const MyButton: import('vue').DefineComponent<
+  {},
+  () => JSX.Element,
+  {},
+  {},
+  {},
+  import('vue').ComponentOptionsMixin,
+  import('vue').ComponentOptionsMixin,
+  import('vue').EmitsOptions,
+  string,
+  import('vue').VNodeProps &
+    import('vue').AllowedComponentProps &
+    import('vue').ComponentCustomProps,
+  Readonly<import('vue').ExtractPropTypes<{}>>,
+  {}
+>
+
+;<MyButton class="x" />