]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(types): retain type parameters order for public types
authorEvan You <yyx990803@gmail.com>
Wed, 5 Apr 2023 14:30:50 +0000 (22:30 +0800)
committerEvan You <yyx990803@gmail.com>
Wed, 5 Apr 2023 14:30:50 +0000 (22:30 +0800)
packages/dts-test/defineComponent.test-d.tsx
packages/runtime-core/src/apiDefineComponent.ts
packages/runtime-core/src/componentOptions.ts
packages/runtime-core/src/componentPublicInstance.ts
packages/runtime-dom/src/apiCustomElement.ts

index 32912dd9a2a07393fe63c3e0bf99011911461cd6..edd8d17eb067b32f4111fa7f21054db78ac26219 100644 (file)
@@ -1494,9 +1494,9 @@ declare const MyButton: DefineComponent<
   ComponentOptionsMixin,
   EmitsOptions,
   string,
-  {},
   VNodeProps & AllowedComponentProps & ComponentCustomProps,
   Readonly<ExtractPropTypes<{}>>,
+  {},
   {}
 >
 ;<MyButton class="x" />
index 0adc9d29387c98666b156ec1d4e8f60e1134e4e0..5e8e7a8573541dc38bb8baa6763e4b1768312877 100644 (file)
@@ -34,6 +34,13 @@ export type PublicProps = VNodeProps &
   AllowedComponentProps &
   ComponentCustomProps
 
+type ResolveProps<PropsOrPropOptions, E extends EmitsOptions> = Readonly<
+  PropsOrPropOptions extends ComponentPropsOptions
+    ? ExtractPropTypes<PropsOrPropOptions>
+    : PropsOrPropOptions
+> &
+  ({} extends E ? {} : EmitsToProps<E>)
+
 export type DefineComponent<
   PropsOrPropOptions = {},
   RawBindings = {},
@@ -44,15 +51,10 @@ export type DefineComponent<
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = {},
   EE extends string = string,
-  S extends SlotsType = {},
   PP = PublicProps,
-  Props = Readonly<
-    PropsOrPropOptions extends ComponentPropsOptions
-      ? ExtractPropTypes<PropsOrPropOptions>
-      : PropsOrPropOptions
-  > &
-    ({} extends E ? {} : EmitsToProps<E>),
-  Defaults = ExtractDefaultPropTypes<PropsOrPropOptions>
+  Props = ResolveProps<PropsOrPropOptions, E>,
+  Defaults = ExtractDefaultPropTypes<PropsOrPropOptions>,
+  S extends SlotsType = {}
 > = ComponentPublicInstanceConstructor<
   CreateComponentPublicInstance<
     Props,
@@ -152,11 +154,25 @@ export function defineComponent<
     Extends,
     E,
     EE,
-    S,
     I,
-    II
+    II,
+    S
   >
-): DefineComponent<Props, RawBindings, D, C, M, Mixin, Extends, E, EE, S>
+): DefineComponent<
+  Props,
+  RawBindings,
+  D,
+  C,
+  M,
+  Mixin,
+  Extends,
+  E,
+  EE,
+  PublicProps,
+  ResolveProps<Props, E>,
+  ExtractDefaultPropTypes<Props>,
+  S
+>
 
 // overload 3: object format with array props declaration
 // props inferred as { [key in PropNames]?: any }
@@ -173,7 +189,8 @@ export function defineComponent<
   EE extends string = string,
   S extends SlotsType = {},
   I extends ComponentInjectOptions = {},
-  II extends string = string
+  II extends string = string,
+  Props = Readonly<{ [key in PropNames]?: any }>
 >(
   options: ComponentOptionsWithArrayProps<
     PropNames,
@@ -185,12 +202,12 @@ export function defineComponent<
     Extends,
     E,
     EE,
-    S,
     I,
-    II
+    II,
+    S
   >
 ): DefineComponent<
-  Readonly<{ [key in PropNames]?: any }>,
+  Props,
   RawBindings,
   D,
   C,
@@ -199,6 +216,9 @@ export function defineComponent<
   Extends,
   E,
   EE,
+  PublicProps,
+  ResolveProps<Props, E>,
+  ExtractDefaultPropTypes<Props>,
   S
 >
 
@@ -230,11 +250,25 @@ export function defineComponent<
     Extends,
     E,
     EE,
-    S,
     I,
-    II
+    II,
+    S
   >
-): DefineComponent<PropsOptions, RawBindings, D, C, M, Mixin, Extends, E, EE, S>
+): DefineComponent<
+  PropsOptions,
+  RawBindings,
+  D,
+  C,
+  M,
+  Mixin,
+  Extends,
+  E,
+  EE,
+  PublicProps,
+  ResolveProps<PropsOptions, E>,
+  ExtractDefaultPropTypes<PropsOptions>,
+  S
+>
 
 // implementation, close to no-op
 export function defineComponent(
index 04c3839dd1d34d3ff9ff9215f0b6d91d3ee74855..cf459962c446c4a148bf275024429efa2667b8ad 100644 (file)
@@ -219,9 +219,9 @@ export type ComponentOptionsWithoutProps<
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = EmitsOptions,
   EE extends string = string,
-  S extends SlotsType = {},
   I extends ComponentInjectOptions = {},
   II extends string = string,
+  S extends SlotsType = {},
   PE = Props & EmitsToProps<E>
 > = ComponentOptionsBase<
   PE,
@@ -267,9 +267,9 @@ export type ComponentOptionsWithArrayProps<
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = EmitsOptions,
   EE extends string = string,
-  S extends SlotsType = {},
   I extends ComponentInjectOptions = {},
   II extends string = string,
+  S extends SlotsType = {},
   Props = Prettify<Readonly<{ [key in PropNames]?: any } & EmitsToProps<E>>>
 > = ComponentOptionsBase<
   Props,
@@ -315,9 +315,9 @@ export type ComponentOptionsWithObjectProps<
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = EmitsOptions,
   EE extends string = string,
-  S extends SlotsType = {},
   I extends ComponentInjectOptions = {},
   II extends string = string,
+  S extends SlotsType = {},
   Props = Prettify<Readonly<ExtractPropTypes<PropsOptions> & EmitsToProps<E>>>,
   Defaults = ExtractDefaultPropTypes<PropsOptions>
 > = ComponentOptionsBase<
index 9997296b641d706ae2d7f06ad608f96af7b6c70f..7ffa3ab2cf951ce3238785a33d5e77bab7824a39 100644 (file)
@@ -164,12 +164,12 @@ export type CreateComponentPublicInstance<
   PublicC,
   PublicM,
   E,
-  S,
   PublicProps,
   PublicDefaults,
   MakeDefaultsOptional,
   ComponentOptionsBase<P, B, D, C, M, Mixin, Extends, E, string, S, Defaults>,
-  I
+  I,
+  S
 >
 
 // public properties exposed on the proxy, which is used as the render context
@@ -181,12 +181,12 @@ export type ComponentPublicInstance<
   C extends ComputedOptions = {},
   M extends MethodOptions = {},
   E extends EmitsOptions = {},
-  S extends SlotsType = {},
   PublicProps = P,
   Defaults = {},
   MakeDefaultsOptional extends boolean = false,
   Options = ComponentOptionsBase<any, any, any, any, any, any, any, any, any>,
-  I extends ComponentInjectOptions = {}
+  I extends ComponentInjectOptions = {},
+  S extends SlotsType = {}
 > = {
   $: ComponentInternalInstance
   $data: D
index 58bc48f64d64eacc67c7101e3be036948c98e097..1e551cc05dae8631722bd8bbde6956178ac05b52 100644 (file)
@@ -52,9 +52,9 @@ export function defineCustomElement<
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = EmitsOptions,
   EE extends string = string,
-  S extends SlotsType = {},
   I extends ComponentInjectOptions = {},
-  II extends string = string
+  II extends string = string,
+  S extends SlotsType = {}
 >(
   options: ComponentOptionsWithoutProps<
     Props,
@@ -66,9 +66,9 @@ export function defineCustomElement<
     Extends,
     E,
     EE,
-    S,
     I,
-    II
+    II,
+    S
   > & { styles?: string[] }
 ): VueElementConstructor<Props>
 
@@ -83,9 +83,9 @@ export function defineCustomElement<
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = Record<string, any>,
   EE extends string = string,
-  S extends SlotsType = {},
   I extends ComponentInjectOptions = {},
-  II extends string = string
+  II extends string = string,
+  S extends SlotsType = {}
 >(
   options: ComponentOptionsWithArrayProps<
     PropNames,
@@ -97,9 +97,9 @@ export function defineCustomElement<
     Extends,
     E,
     EE,
-    S,
     I,
-    II
+    II,
+    S
   > & { styles?: string[] }
 ): VueElementConstructor<{ [K in PropNames]: any }>
 
@@ -114,9 +114,9 @@ export function defineCustomElement<
   Extends extends ComponentOptionsMixin = ComponentOptionsMixin,
   E extends EmitsOptions = Record<string, any>,
   EE extends string = string,
-  S extends SlotsType = {},
   I extends ComponentInjectOptions = {},
-  II extends string = string
+  II extends string = string,
+  S extends SlotsType = {}
 >(
   options: ComponentOptionsWithObjectProps<
     PropsOptions,
@@ -128,9 +128,9 @@ export function defineCustomElement<
     Extends,
     E,
     EE,
-    S,
     I,
-    II
+    II,
+    S
   > & { styles?: string[] }
 ): VueElementConstructor<ExtractPropTypes<PropsOptions>>