diff --git a/packages-private/dts-test/defineComponent.test-d.tsx b/packages-private/dts-test/defineComponent.test-d.tsx index 810310bac84..79ce6d6956d 100644 --- a/packages-private/dts-test/defineComponent.test-d.tsx +++ b/packages-private/dts-test/defineComponent.test-d.tsx @@ -906,12 +906,15 @@ describe('emits', () => { emits: { click: (n: number) => typeof n === 'number', input: (b: string) => b.length > 1, + Focus: (f: boolean) => !!f, }, setup(props, { emit }) { expectType<((n: number) => boolean) | undefined>(props.onClick) expectType<((b: string) => boolean) | undefined>(props.onInput) + expectType<((f: boolean) => boolean) | undefined>(props.onFocus) emit('click', 1) emit('input', 'foo') + emit('Focus', true) // @ts-expect-error emit('nope') // @ts-expect-error @@ -922,6 +925,10 @@ describe('emits', () => { emit('input') // @ts-expect-error emit('input', 1) + // @ts-expect-error + emit('focus') + // @ts-expect-error + emit('focus', true) }, created() { this.$emit('click', 1) @@ -936,6 +943,10 @@ describe('emits', () => { this.$emit('input') // @ts-expect-error this.$emit('input', 1) + // @ts-expect-error + this.$emit('focus') + // @ts-expect-error + this.$emit('focus', true) }, mounted() { // #3599 @@ -954,6 +965,10 @@ describe('emits', () => { this.$emit('input') // @ts-expect-error this.$emit('input', 1) + // @ts-expect-error + this.$emit('focus') + // @ts-expect-error + this.$emit('focus', true) }) }, }) diff --git a/packages/runtime-core/src/componentEmits.ts b/packages/runtime-core/src/componentEmits.ts index 4c3912e0598..dddb2e9453e 100644 --- a/packages/runtime-core/src/componentEmits.ts +++ b/packages/runtime-core/src/componentEmits.ts @@ -47,15 +47,13 @@ export type EmitsToProps = } : T extends ObjectEmitsOptions ? { - [K in `on${Capitalize}`]?: K extends `on${infer C}` - ? ( - ...args: T[Uncapitalize] extends (...args: infer P) => any - ? P - : T[Uncapitalize] extends null - ? any[] - : never - ) => any - : never + [K in string & keyof T as `on${Capitalize}`]?: ( + ...args: T[K] extends (...args: infer P) => any + ? P + : T[K] extends null + ? any[] + : never + ) => any } : {}