From 169ebfe4d2d57d42d140b041d7a722b9bb5d01ee Mon Sep 17 00:00:00 2001 From: Evan You Date: Sat, 27 Apr 2024 11:24:24 +0800 Subject: [PATCH] chore: fix EmitsOptions --- .../runtime-core/src/apiDefineComponent.ts | 47 +++++++++---------- packages/runtime-core/src/apiSetupHelpers.ts | 18 +++---- packages/runtime-core/src/component.ts | 12 ++--- packages/runtime-core/src/componentEmits.ts | 4 +- packages/runtime-core/src/componentOptions.ts | 24 +++++----- .../src/componentPublicInstance.ts | 6 +-- packages/runtime-core/src/h.ts | 4 +- packages/runtime-core/src/index.ts | 2 +- packages/runtime-dom/src/apiCustomElement.ts | 18 +++---- 9 files changed, 64 insertions(+), 71 deletions(-) diff --git a/packages/runtime-core/src/apiDefineComponent.ts b/packages/runtime-core/src/apiDefineComponent.ts index 70b9d727c64..7fce96586da 100644 --- a/packages/runtime-core/src/apiDefineComponent.ts +++ b/packages/runtime-core/src/apiDefineComponent.ts @@ -23,7 +23,7 @@ import type { ExtractPropTypes, } from './componentProps' import type { - ComponentEmitsOptions, + EmitsOptions, EmitsToProps, TypeEmitsToOptions, } from './componentEmits' @@ -41,10 +41,7 @@ export type PublicProps = VNodeProps & AllowedComponentProps & ComponentCustomProps -type ResolveProps< - PropsOrPropOptions, - E extends ComponentEmitsOptions, -> = Readonly< +type ResolveProps = Readonly< PropsOrPropOptions extends ComponentPropsOptions ? ExtractPropTypes : PropsOrPropOptions @@ -59,7 +56,7 @@ export type DefineComponent< M extends MethodOptions = MethodOptions, Mixin extends ComponentOptionsMixin = ComponentOptionsMixin, Extends extends ComponentOptionsMixin = ComponentOptionsMixin, - E extends ComponentEmitsOptions = {}, + E extends EmitsOptions = {}, EE extends string = string, PP = PublicProps, Props = ResolveProps, @@ -113,7 +110,7 @@ export type DefineComponent< export type DefineSetupFnComponent< P extends Record, - E extends ComponentEmitsOptions = {}, + E extends EmitsOptions = {}, S extends SlotsType = SlotsType, Props = P & EmitsToProps, PP = PublicProps, @@ -144,7 +141,7 @@ export type DefineSetupFnComponent< // (uses user defined props interface) export function defineComponent< Props extends Record, - E extends ComponentEmitsOptions = {}, + E extends EmitsOptions = {}, EE extends string = string, S extends SlotsType = {}, >( @@ -160,7 +157,7 @@ export function defineComponent< ): DefineSetupFnComponent export function defineComponent< Props extends Record, - E extends ComponentEmitsOptions = {}, + E extends EmitsOptions = {}, EE extends string = string, S extends SlotsType = {}, >( @@ -179,13 +176,13 @@ export function defineComponent< export function defineComponent< // props TypeProps, - PropsOptions extends + RuntimePropsOptions extends ComponentObjectPropsOptions = ComponentObjectPropsOptions, - PropsKeys extends string = string, + RuntimePropsKeys extends string = string, // emits TypeEmits extends ComponentTypeEmits = {}, - EmitsOptions extends ComponentEmitsOptions = {}, - EmitsKeys extends string = string, + RuntimeEmitsOptions extends EmitsOptions = {}, + RuntimeEmitsKeys extends string = string, // other options Data = {}, SetupBindings = {}, @@ -201,20 +198,20 @@ export function defineComponent< Exposed extends string = string, Provide extends ComponentProvideOptions = ComponentProvideOptions, // resolved types - ResolvedEmits extends ComponentEmitsOptions = {} extends EmitsOptions + ResolvedEmits extends EmitsOptions = {} extends RuntimeEmitsOptions ? TypeEmitsToOptions - : EmitsOptions, + : RuntimeEmitsOptions, InferredProps = unknown extends TypeProps - ? string extends PropsKeys - ? ComponentObjectPropsOptions extends PropsOptions + ? string extends RuntimePropsKeys + ? ComponentObjectPropsOptions extends RuntimePropsOptions ? {} - : ExtractPropTypes - : { [key in PropsKeys]?: any } + : ExtractPropTypes + : { [key in RuntimePropsKeys]?: any } : TypeProps, ResolvedProps = Readonly>, >( options: { - props?: (PropsOptions & ThisType) | PropsKeys[] + props?: (RuntimePropsOptions & ThisType) | RuntimePropsKeys[] /** * @private for language-tools use only */ @@ -231,8 +228,8 @@ export function defineComponent< Methods, Mixin, Extends, - EmitsOptions, - EmitsKeys, + RuntimeEmitsOptions, + RuntimeEmitsKeys, {}, // Defaults InjectOptions, InjectKeys, @@ -252,7 +249,7 @@ export function defineComponent< Mixin, Extends, ResolvedEmits, - EmitsKeys, + RuntimeEmitsKeys, {}, false, InjectOptions, @@ -271,10 +268,10 @@ export function defineComponent< Mixin, Extends, ResolvedEmits, - EmitsKeys, + RuntimeEmitsKeys, PublicProps, ResolvedProps, - ExtractDefaultPropTypes, + ExtractDefaultPropTypes, Slots, LocalComponents, Directives, diff --git a/packages/runtime-core/src/apiSetupHelpers.ts b/packages/runtime-core/src/apiSetupHelpers.ts index da092babcf5..dbe27dde48e 100644 --- a/packages/runtime-core/src/apiSetupHelpers.ts +++ b/packages/runtime-core/src/apiSetupHelpers.ts @@ -14,11 +14,7 @@ import { setCurrentInstance, unsetCurrentInstance, } from './component' -import type { - ComponentEmitsOptions, - EmitFn, - ObjectEmitsOptions, -} from './componentEmits' +import type { EmitFn, EmitsOptions, ObjectEmitsOptions } from './componentEmits' import type { ComponentOptionsBase, ComponentOptionsMixin, @@ -136,9 +132,9 @@ type BooleanKey = K extends any export function defineEmits( emitOptions: EE[], ): EmitFn -export function defineEmits< - E extends ComponentEmitsOptions = ComponentEmitsOptions, ->(emitOptions: E): EmitFn +export function defineEmits( + emitOptions: E, +): EmitFn export function defineEmits(): T extends ( ...args: any[] ) => any @@ -398,7 +394,7 @@ function getContext(): SetupContext { * @internal */ export function normalizePropsOrEmits( - props: ComponentPropsOptions | ComponentEmitsOptions, + props: ComponentPropsOptions | EmitsOptions, ) { return isArray(props) ? props.reduce( @@ -445,8 +441,8 @@ export function mergeDefaults( * @internal */ export function mergeModels( - a: ComponentPropsOptions | ComponentEmitsOptions, - b: ComponentPropsOptions | ComponentEmitsOptions, + a: ComponentPropsOptions | EmitsOptions, + b: ComponentPropsOptions | EmitsOptions, ) { if (!a || !b) return a || b if (isArray(a) && isArray(b)) return a.concat(b) diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index 10317e5aff9..68d908310d4 100644 --- a/packages/runtime-core/src/component.ts +++ b/packages/runtime-core/src/component.ts @@ -51,8 +51,8 @@ import { resolveMergedOptions, } from './componentOptions' import { - type ComponentEmitsOptions, type EmitFn, + type EmitsOptions, type EmitsToProps, type ObjectEmitsOptions, type ShortEmitsToObject, @@ -211,9 +211,9 @@ export interface ComponentInternalOptions { export interface FunctionalComponent< P = {}, - E extends ComponentEmitsOptions | Record = {}, + E extends EmitsOptions | Record = {}, S extends Record = any, - EE extends ComponentEmitsOptions = ShortEmitsToObject, + EE extends EmitsOptions = ShortEmitsToObject, > extends ComponentInternalOptions { // use of any here is intentional so it can be a valid JSX Element constructor ( @@ -245,7 +245,7 @@ export type ConcreteComponent< D = any, C extends ComputedOptions = ComputedOptions, M extends MethodOptions = MethodOptions, - E extends ComponentEmitsOptions | Record = {}, + E extends EmitsOptions | Record = {}, S extends Record = any, > = | ComponentOptions @@ -261,7 +261,7 @@ export type Component< D = any, C extends ComputedOptions = ComputedOptions, M extends MethodOptions = MethodOptions, - E extends ComponentEmitsOptions | Record = {}, + E extends EmitsOptions | Record = {}, S extends Record = any, > = | ConcreteComponent @@ -273,7 +273,7 @@ type LifecycleHook = TFn[] | null // use `E extends any` to force evaluating type to fix #2362 export type SetupContext< - E = ComponentEmitsOptions, + E = EmitsOptions, S extends SlotsType = {}, > = E extends any ? { diff --git a/packages/runtime-core/src/componentEmits.ts b/packages/runtime-core/src/componentEmits.ts index fae4f6c9333..eb80d02afb6 100644 --- a/packages/runtime-core/src/componentEmits.ts +++ b/packages/runtime-core/src/componentEmits.ts @@ -36,9 +36,9 @@ export type ObjectEmitsOptions = Record< ((...args: any[]) => any) | null > -export type ComponentEmitsOptions = ObjectEmitsOptions | string[] +export type EmitsOptions = ObjectEmitsOptions | string[] -export type EmitsToProps = +export type EmitsToProps = T extends string[] ? { [K in `on${Capitalize}`]?: (...args: any[]) => any diff --git a/packages/runtime-core/src/componentOptions.ts b/packages/runtime-core/src/componentOptions.ts index 1246a2aa6ba..ac1841edee9 100644 --- a/packages/runtime-core/src/componentOptions.ts +++ b/packages/runtime-core/src/componentOptions.ts @@ -55,7 +55,7 @@ import type { ExtractPropTypes, } from './componentProps' import type { - ComponentEmitsOptions, + EmitsOptions, EmitsToProps, TypeEmitsToOptions, } from './componentEmits' @@ -113,7 +113,7 @@ export interface ComponentOptionsBase< M extends MethodOptions, Mixin extends ComponentOptionsMixin, Extends extends ComponentOptionsMixin, - E extends ComponentEmitsOptions, + E extends EmitsOptions, EE extends string = string, Defaults = {}, I extends ComponentInjectOptions = {}, @@ -233,7 +233,7 @@ export type ComponentOptions< M extends MethodOptions = any, Mixin extends ComponentOptionsMixin = any, Extends extends ComponentOptionsMixin = any, - E extends ComponentEmitsOptions = any, + E extends EmitsOptions = any, EE extends string = string, Defaults = {}, I extends ComponentInjectOptions = {}, @@ -1031,16 +1031,16 @@ function mergeObjectOptions(to: Object | undefined, from: Object | undefined) { } function mergeEmitsOrPropsOptions( - to: ComponentEmitsOptions | undefined, - from: ComponentEmitsOptions | undefined, -): ComponentEmitsOptions | undefined + to: EmitsOptions | undefined, + from: EmitsOptions | undefined, +): EmitsOptions | undefined function mergeEmitsOrPropsOptions( to: ComponentPropsOptions | undefined, from: ComponentPropsOptions | undefined, ): ComponentPropsOptions | undefined function mergeEmitsOrPropsOptions( - to: ComponentPropsOptions | ComponentEmitsOptions | undefined, - from: ComponentPropsOptions | ComponentEmitsOptions | undefined, + to: ComponentPropsOptions | EmitsOptions | undefined, + from: ComponentPropsOptions | EmitsOptions | undefined, ) { if (to) { if (isArray(to) && isArray(from)) { @@ -1082,7 +1082,7 @@ export type ComponentOptionsWithoutProps< M extends MethodOptions = {}, Mixin extends ComponentOptionsMixin = ComponentOptionsMixin, Extends extends ComponentOptionsMixin = ComponentOptionsMixin, - E extends ComponentEmitsOptions = {}, + E extends EmitsOptions = {}, EE extends string = string, I extends ComponentInjectOptions = {}, II extends string = string, @@ -1092,7 +1092,7 @@ export type ComponentOptionsWithoutProps< Exposed extends string = string, Provide extends ComponentProvideOptions = ComponentProvideOptions, TE extends ComponentTypeEmits = {}, - ResolvedEmits extends ComponentEmitsOptions = {} extends E + ResolvedEmits extends EmitsOptions = {} extends E ? TypeEmitsToOptions : E, PE = Props & EmitsToProps, @@ -1156,7 +1156,7 @@ export type ComponentOptionsWithArrayProps< M extends MethodOptions = {}, Mixin extends ComponentOptionsMixin = ComponentOptionsMixin, Extends extends ComponentOptionsMixin = ComponentOptionsMixin, - E extends ComponentEmitsOptions = ComponentEmitsOptions, + E extends EmitsOptions = EmitsOptions, EE extends string = string, I extends ComponentInjectOptions = {}, II extends string = string, @@ -1218,7 +1218,7 @@ export type ComponentOptionsWithObjectProps< M extends MethodOptions = {}, Mixin extends ComponentOptionsMixin = ComponentOptionsMixin, Extends extends ComponentOptionsMixin = ComponentOptionsMixin, - E extends ComponentEmitsOptions = ComponentEmitsOptions, + E extends EmitsOptions = EmitsOptions, EE extends string = string, I extends ComponentInjectOptions = {}, II extends string = string, diff --git a/packages/runtime-core/src/componentPublicInstance.ts b/packages/runtime-core/src/componentPublicInstance.ts index 9018f7a55b5..864b9786efe 100644 --- a/packages/runtime-core/src/componentPublicInstance.ts +++ b/packages/runtime-core/src/componentPublicInstance.ts @@ -47,7 +47,7 @@ import { resolveMergedOptions, shouldCacheAccess, } from './componentOptions' -import type { ComponentEmitsOptions, EmitFn } from './componentEmits' +import type { EmitFn, EmitsOptions } from './componentEmits' import type { SlotsType, UnwrapSlotsType } from './componentSlots' import { markAttrsAccessed } from './componentRenderUtils' import { currentRenderingInstance } from './componentRenderContext' @@ -158,7 +158,7 @@ export type CreateComponentPublicInstance< M extends MethodOptions = {}, Mixin extends ComponentOptionsMixin = ComponentOptionsMixin, Extends extends ComponentOptionsMixin = ComponentOptionsMixin, - E extends ComponentEmitsOptions = {}, + E extends EmitsOptions = {}, PublicProps = P, Defaults = {}, MakeDefaultsOptional extends boolean = false, @@ -225,7 +225,7 @@ export type ComponentPublicInstance< D = {}, // return from data() C extends ComputedOptions = {}, M extends MethodOptions = {}, - E extends ComponentEmitsOptions = {}, + E extends EmitsOptions = {}, PublicProps = P, Defaults = {}, MakeDefaultsOptional extends boolean = false, diff --git a/packages/runtime-core/src/h.ts b/packages/runtime-core/src/h.ts index 644620275fd..93e7fd9bc88 100644 --- a/packages/runtime-core/src/h.ts +++ b/packages/runtime-core/src/h.ts @@ -18,7 +18,7 @@ import type { ConcreteComponent, FunctionalComponent, } from './component' -import type { ComponentEmitsOptions } from './componentEmits' +import type { EmitsOptions } from './componentEmits' import type { DefineComponent } from './apiDefineComponent' // `h` is a more user-friendly version of `createVNode` that allows omitting the @@ -139,7 +139,7 @@ export function h( // functional component export function h< P, - E extends ComponentEmitsOptions = {}, + E extends EmitsOptions = {}, S extends Record = any, >( type: FunctionalComponent, diff --git a/packages/runtime-core/src/index.ts b/packages/runtime-core/src/index.ts index 478ae6bbb56..e4a9e53f29c 100644 --- a/packages/runtime-core/src/index.ts +++ b/packages/runtime-core/src/index.ts @@ -271,7 +271,7 @@ export type { ComponentInjectOptions, } from './componentOptions' export type { - ComponentEmitsOptions as EmitsOptions, + EmitsOptions, ObjectEmitsOptions, EmitsToProps, } from './componentEmits' diff --git a/packages/runtime-dom/src/apiCustomElement.ts b/packages/runtime-dom/src/apiCustomElement.ts index b8adc761b37..01728466241 100644 --- a/packages/runtime-dom/src/apiCustomElement.ts +++ b/packages/runtime-dom/src/apiCustomElement.ts @@ -1,6 +1,5 @@ import { type Component, - type EmitsOptions as ComponentEmitsOptions, type ComponentInjectOptions, type ComponentInternalInstance, type ComponentObjectPropsOptions, @@ -13,6 +12,7 @@ import { type CreateComponentPublicInstance, type DefineComponent, type Directive, + type EmitsOptions, type EmitsToProps, type ExtractPropTypes, type MethodOptions, @@ -47,11 +47,11 @@ export function defineCustomElement( // overload 2: defineCustomElement with options object, infer props from options export function defineCustomElement< // props - PropsOptions extends + RuntimePropsOptions extends ComponentObjectPropsOptions = ComponentObjectPropsOptions, PropsKeys extends string = string, // emits - EmitsOptions extends ComponentEmitsOptions = {}, + RuntimeEmitsOptions extends EmitsOptions = {}, EmitsKeys extends string = string, // other options Data = {}, @@ -69,14 +69,14 @@ export function defineCustomElement< Provide extends ComponentProvideOptions = ComponentProvideOptions, // resolved types InferredProps = string extends PropsKeys - ? ComponentObjectPropsOptions extends PropsOptions + ? ComponentObjectPropsOptions extends RuntimePropsOptions ? {} - : ExtractPropTypes + : ExtractPropTypes : { [key in PropsKeys]?: any }, - ResolvedProps = InferredProps & EmitsToProps, + ResolvedProps = InferredProps & EmitsToProps, >( options: { - props?: (PropsOptions & ThisType) | PropsKeys[] + props?: (RuntimePropsOptions & ThisType) | PropsKeys[] } & ComponentOptionsBase< ResolvedProps, SetupBindings, @@ -85,7 +85,7 @@ export function defineCustomElement< Methods, Mixin, Extends, - EmitsOptions, + RuntimeEmitsOptions, EmitsKeys, {}, // Defaults InjectOptions, @@ -105,7 +105,7 @@ export function defineCustomElement< Methods, Mixin, Extends, - EmitsOptions, + RuntimeEmitsOptions, EmitsKeys, {}, false,