Skip to content

Commit

Permalink
chore: fix EmitsOptions
Browse files Browse the repository at this point in the history
  • Loading branch information
yyx990803 committed Apr 27, 2024
1 parent b2a6c5b commit 169ebfe
Show file tree
Hide file tree
Showing 9 changed files with 64 additions and 71 deletions.
47 changes: 22 additions & 25 deletions packages/runtime-core/src/apiDefineComponent.ts
Expand Up @@ -23,7 +23,7 @@ import type {
ExtractPropTypes,
} from './componentProps'
import type {
ComponentEmitsOptions,
EmitsOptions,
EmitsToProps,
TypeEmitsToOptions,
} from './componentEmits'
Expand All @@ -41,10 +41,7 @@ export type PublicProps = VNodeProps &
AllowedComponentProps &
ComponentCustomProps

type ResolveProps<
PropsOrPropOptions,
E extends ComponentEmitsOptions,
> = Readonly<
type ResolveProps<PropsOrPropOptions, E extends EmitsOptions> = Readonly<
PropsOrPropOptions extends ComponentPropsOptions
? ExtractPropTypes<PropsOrPropOptions>
: PropsOrPropOptions
Expand All @@ -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<PropsOrPropOptions, E>,
Expand Down Expand Up @@ -113,7 +110,7 @@ export type DefineComponent<

export type DefineSetupFnComponent<
P extends Record<string, any>,
E extends ComponentEmitsOptions = {},
E extends EmitsOptions = {},
S extends SlotsType = SlotsType,
Props = P & EmitsToProps<E>,
PP = PublicProps,
Expand Down Expand Up @@ -144,7 +141,7 @@ export type DefineSetupFnComponent<
// (uses user defined props interface)
export function defineComponent<
Props extends Record<string, any>,
E extends ComponentEmitsOptions = {},
E extends EmitsOptions = {},
EE extends string = string,
S extends SlotsType = {},
>(
Expand All @@ -160,7 +157,7 @@ export function defineComponent<
): DefineSetupFnComponent<Props, E, S>
export function defineComponent<
Props extends Record<string, any>,
E extends ComponentEmitsOptions = {},
E extends EmitsOptions = {},
EE extends string = string,
S extends SlotsType = {},
>(
Expand All @@ -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 = {},
Expand All @@ -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<TypeEmits>
: EmitsOptions,
: RuntimeEmitsOptions,
InferredProps = unknown extends TypeProps
? string extends PropsKeys
? ComponentObjectPropsOptions extends PropsOptions
? string extends RuntimePropsKeys
? ComponentObjectPropsOptions extends RuntimePropsOptions
? {}
: ExtractPropTypes<PropsOptions>
: { [key in PropsKeys]?: any }
: ExtractPropTypes<RuntimePropsOptions>
: { [key in RuntimePropsKeys]?: any }
: TypeProps,
ResolvedProps = Readonly<InferredProps & EmitsToProps<ResolvedEmits>>,
>(
options: {
props?: (PropsOptions & ThisType<void>) | PropsKeys[]
props?: (RuntimePropsOptions & ThisType<void>) | RuntimePropsKeys[]
/**
* @private for language-tools use only
*/
Expand All @@ -231,8 +228,8 @@ export function defineComponent<
Methods,
Mixin,
Extends,
EmitsOptions,
EmitsKeys,
RuntimeEmitsOptions,
RuntimeEmitsKeys,
{}, // Defaults
InjectOptions,
InjectKeys,
Expand All @@ -252,7 +249,7 @@ export function defineComponent<
Mixin,
Extends,
ResolvedEmits,
EmitsKeys,
RuntimeEmitsKeys,
{},
false,
InjectOptions,
Expand All @@ -271,10 +268,10 @@ export function defineComponent<
Mixin,
Extends,
ResolvedEmits,
EmitsKeys,
RuntimeEmitsKeys,
PublicProps,
ResolvedProps,
ExtractDefaultPropTypes<PropsOptions>,
ExtractDefaultPropTypes<RuntimePropsOptions>,
Slots,
LocalComponents,
Directives,
Expand Down
18 changes: 7 additions & 11 deletions packages/runtime-core/src/apiSetupHelpers.ts
Expand Up @@ -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,
Expand Down Expand Up @@ -136,9 +132,9 @@ type BooleanKey<T, K extends keyof T = keyof T> = K extends any
export function defineEmits<EE extends string = string>(
emitOptions: EE[],
): EmitFn<EE[]>
export function defineEmits<
E extends ComponentEmitsOptions = ComponentEmitsOptions,
>(emitOptions: E): EmitFn<E>
export function defineEmits<E extends EmitsOptions = EmitsOptions>(
emitOptions: E,
): EmitFn<E>
export function defineEmits<T extends ComponentTypeEmits>(): T extends (
...args: any[]
) => any
Expand Down Expand Up @@ -398,7 +394,7 @@ function getContext(): SetupContext {
* @internal
*/
export function normalizePropsOrEmits(
props: ComponentPropsOptions | ComponentEmitsOptions,
props: ComponentPropsOptions | EmitsOptions,
) {
return isArray(props)
? props.reduce(
Expand Down Expand Up @@ -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)
Expand Down
12 changes: 6 additions & 6 deletions packages/runtime-core/src/component.ts
Expand Up @@ -51,8 +51,8 @@ import {
resolveMergedOptions,
} from './componentOptions'
import {
type ComponentEmitsOptions,
type EmitFn,
type EmitsOptions,
type EmitsToProps,
type ObjectEmitsOptions,
type ShortEmitsToObject,
Expand Down Expand Up @@ -211,9 +211,9 @@ export interface ComponentInternalOptions {

export interface FunctionalComponent<
P = {},
E extends ComponentEmitsOptions | Record<string, any[]> = {},
E extends EmitsOptions | Record<string, any[]> = {},
S extends Record<string, any> = any,
EE extends ComponentEmitsOptions = ShortEmitsToObject<E>,
EE extends EmitsOptions = ShortEmitsToObject<E>,
> extends ComponentInternalOptions {
// use of any here is intentional so it can be a valid JSX Element constructor
(
Expand Down Expand Up @@ -245,7 +245,7 @@ export type ConcreteComponent<
D = any,
C extends ComputedOptions = ComputedOptions,
M extends MethodOptions = MethodOptions,
E extends ComponentEmitsOptions | Record<string, any[]> = {},
E extends EmitsOptions | Record<string, any[]> = {},
S extends Record<string, any> = any,
> =
| ComponentOptions<Props, RawBindings, D, C, M>
Expand All @@ -261,7 +261,7 @@ export type Component<
D = any,
C extends ComputedOptions = ComputedOptions,
M extends MethodOptions = MethodOptions,
E extends ComponentEmitsOptions | Record<string, any[]> = {},
E extends EmitsOptions | Record<string, any[]> = {},
S extends Record<string, any> = any,
> =
| ConcreteComponent<Props, RawBindings, D, C, M, E, S>
Expand All @@ -273,7 +273,7 @@ type LifecycleHook<TFn = Function> = 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
? {
Expand Down
4 changes: 2 additions & 2 deletions packages/runtime-core/src/componentEmits.ts
Expand Up @@ -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<T extends ComponentEmitsOptions | ComponentTypeEmits> =
export type EmitsToProps<T extends EmitsOptions | ComponentTypeEmits> =
T extends string[]
? {
[K in `on${Capitalize<T[number]>}`]?: (...args: any[]) => any
Expand Down
24 changes: 12 additions & 12 deletions packages/runtime-core/src/componentOptions.ts
Expand Up @@ -55,7 +55,7 @@ import type {
ExtractPropTypes,
} from './componentProps'
import type {
ComponentEmitsOptions,
EmitsOptions,
EmitsToProps,
TypeEmitsToOptions,
} from './componentEmits'
Expand Down Expand Up @@ -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 = {},
Expand Down Expand Up @@ -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 = {},
Expand Down Expand Up @@ -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)) {
Expand Down Expand Up @@ -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,
Expand All @@ -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<TE>
: E,
PE = Props & EmitsToProps<ResolvedEmits>,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down
6 changes: 3 additions & 3 deletions packages/runtime-core/src/componentPublicInstance.ts
Expand Up @@ -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'
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand Down
4 changes: 2 additions & 2 deletions packages/runtime-core/src/h.ts
Expand Up @@ -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
Expand Down Expand Up @@ -139,7 +139,7 @@ export function h(
// functional component
export function h<
P,
E extends ComponentEmitsOptions = {},
E extends EmitsOptions = {},
S extends Record<string, any> = any,
>(
type: FunctionalComponent<P, any, S, any>,
Expand Down
2 changes: 1 addition & 1 deletion packages/runtime-core/src/index.ts
Expand Up @@ -271,7 +271,7 @@ export type {
ComponentInjectOptions,
} from './componentOptions'
export type {
ComponentEmitsOptions as EmitsOptions,
EmitsOptions,
ObjectEmitsOptions,
EmitsToProps,
} from './componentEmits'
Expand Down

0 comments on commit 169ebfe

Please sign in to comment.