From 8071ef47b5adcd5fcd9d0d2ea2cefff5c34ce095 Mon Sep 17 00:00:00 2001 From: Evan You Date: Sat, 21 May 2022 00:53:46 +0800 Subject: [PATCH] fix(types): restore DefineComponent argument order This is necessary for compatibility w/ tsc-generated component types using DefineComponent. revert #5416 reopen #3796 fix #5967 --- .../runtime-core/src/apiAsyncComponent.ts | 2 +- .../runtime-core/src/apiDefineComponent.ts | 173 ++++-------------- packages/runtime-core/src/componentOptions.ts | 22 +-- .../src/componentPublicInstance.ts | 20 +- test-dts/defineComponent.test-d.tsx | 33 ++-- 5 files changed, 64 insertions(+), 186 deletions(-) diff --git a/packages/runtime-core/src/apiAsyncComponent.ts b/packages/runtime-core/src/apiAsyncComponent.ts index c9b96607b5f..41ccd94a744 100644 --- a/packages/runtime-core/src/apiAsyncComponent.ts +++ b/packages/runtime-core/src/apiAsyncComponent.ts @@ -111,7 +111,7 @@ export function defineAsyncComponent< ) } - return defineComponent<{}>({ + return defineComponent({ name: 'AsyncComponentWrapper', __asyncLoader: load, diff --git a/packages/runtime-core/src/apiDefineComponent.ts b/packages/runtime-core/src/apiDefineComponent.ts index a086704762a..83446346fab 100644 --- a/packages/runtime-core/src/apiDefineComponent.ts +++ b/packages/runtime-core/src/apiDefineComponent.ts @@ -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), Defaults = ExtractDefaultPropTypes -> = 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 // 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, - 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, - 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 // implementation, close to no-op export function defineComponent(options: unknown) { diff --git a/packages/runtime-core/src/componentOptions.ts b/packages/runtime-core/src/componentOptions.ts index c482d051965..0d47e18c4af 100644 --- a/packages/runtime-core/src/componentOptions.ts +++ b/packages/runtime-core/src/componentOptions.ts @@ -118,9 +118,8 @@ export interface ComponentOptionsBase< Extends extends ComponentOptionsMixin, E extends EmitsOptions, EE extends string = string, - Defaults = {}, - Provide extends ComponentProvideOptions = ComponentProvideOptions -> extends LegacyOptions, + Defaults = {} +> extends LegacyOptions, 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 > = 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 > = 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> & EmitsToProps, Defaults = ExtractDefaultPropTypes > = ComponentOptionsBase< @@ -308,8 +302,7 @@ export type ComponentOptionsWithObjectProps< Extends, E, EE, - Defaults, - Provide + Defaults > & { props: PropsOptions & ThisType } & 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 diff --git a/packages/runtime-core/src/componentPublicInstance.ts b/packages/runtime-core/src/componentPublicInstance.ts index 986a2e79b55..1d913673123 100644 --- a/packages/runtime-core/src/componentPublicInstance.ts +++ b/packages/runtime-core/src/componentPublicInstance.ts @@ -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 & EnsureNonVoid, PublicDefaults = UnwrapMixinsType & - EnsureNonVoid, - Provide extends ComponentProvideOptions = ComponentProvideOptions + EnsureNonVoid > = 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 > // public properties exposed on the proxy, which is used as the render context diff --git a/test-dts/defineComponent.test-d.tsx b/test-dts/defineComponent.test-d.tsx index 7412d6db36f..30d25436201 100644 --- a/test-dts/defineComponent.test-d.tsx +++ b/test-dts/defineComponent.test-d.tsx @@ -264,18 +264,6 @@ describe('with object props', () => { expectType(MyComponent) - expectType(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(defineComponent({}).render) - // Test TSX expectType( JSX.Element, + {}, + {}, + {}, + import('vue').ComponentOptionsMixin, + import('vue').ComponentOptionsMixin, + import('vue').EmitsOptions, + string, + import('vue').VNodeProps & + import('vue').AllowedComponentProps & + import('vue').ComponentCustomProps, + Readonly>, + {} +> + +;