From 5d932a8e6d14343c9d7fc7c2ecb58ac618b2f938 Mon Sep 17 00:00:00 2001 From: Rudy Date: Fri, 10 Nov 2023 13:52:54 +0800 Subject: [PATCH] fix(types): defineCustomElement using defineComponent return type with emits (#7937) close #7782 --- .../dts-test/defineCustomElement.test-d.ts | 25 +++++++++++++++++-- packages/runtime-dom/src/apiCustomElement.ts | 10 ++++---- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/packages/dts-test/defineCustomElement.test-d.ts b/packages/dts-test/defineCustomElement.test-d.ts index 4e7cf228372..f4f238641db 100644 --- a/packages/dts-test/defineCustomElement.test-d.ts +++ b/packages/dts-test/defineCustomElement.test-d.ts @@ -1,5 +1,9 @@ -import { defineCustomElement } from 'vue' -import { expectType, describe } from './utils' +import { + defineCustomElement, + defineComponent, + type VueElementConstructor +} from 'vue' +import { expectType, describe, test } from './utils' describe('inject', () => { // with object inject @@ -62,3 +66,20 @@ describe('inject', () => { } }) }) + +describe('defineCustomElement using defineComponent return type', () => { + test('with emits', () => { + const Comp1Vue = defineComponent({ + props: { + a: String + }, + emits: { + click: () => true + } + }) + const Comp = defineCustomElement(Comp1Vue) + expectType(Comp) + + expectType(new Comp().a) + }) +}) diff --git a/packages/runtime-dom/src/apiCustomElement.ts b/packages/runtime-dom/src/apiCustomElement.ts index 5662b0b535b..de37605d68a 100644 --- a/packages/runtime-dom/src/apiCustomElement.ts +++ b/packages/runtime-dom/src/apiCustomElement.ts @@ -4,7 +4,6 @@ import { ComponentOptionsWithObjectProps, ComponentOptionsWithoutProps, ComponentPropsOptions, - ComponentPublicInstance, ComputedOptions, EmitsOptions, MethodOptions, @@ -21,7 +20,8 @@ import { ConcreteComponent, ComponentOptions, ComponentInjectOptions, - SlotsType + SlotsType, + DefineComponent } from '@vue/runtime-core' import { camelize, extend, hyphenate, isArray, toNumber } from '@vue/shared' import { hydrate, render } from '.' @@ -136,9 +136,9 @@ export function defineCustomElement< // overload 5: defining a custom element from the returned value of // `defineComponent` -export function defineCustomElement(options: { - new (...args: any[]): ComponentPublicInstance -}): VueElementConstructor +export function defineCustomElement

( + options: DefineComponent +): VueElementConstructor> /*! #__NO_SIDE_EFFECTS__ */ export function defineCustomElement(