diff --git a/packages/dts-test/h.test-d.ts b/packages/dts-test/h.test-d.ts index 5c700800e94..f2e984b49b8 100644 --- a/packages/dts-test/h.test-d.ts +++ b/packages/dts-test/h.test-d.ts @@ -1,6 +1,7 @@ import { h, defineComponent, + DefineComponent, ref, Fragment, Teleport, @@ -231,3 +232,18 @@ describe('resolveComponent should work', () => { message: '1' }) }) + +// #5431 +describe('h should work with multiple types', () => { + const serializers = { + Paragraph: 'p', + Component: {} as Component, + DefineComponent: {} as DefineComponent + } + + const sampleComponent = serializers['' as keyof typeof serializers] + + h(sampleComponent) + h(sampleComponent, {}) + h(sampleComponent, {}, []) +}) diff --git a/packages/runtime-core/src/h.ts b/packages/runtime-core/src/h.ts index 73b27107b8b..4ca90262f2a 100644 --- a/packages/runtime-core/src/h.ts +++ b/packages/runtime-core/src/h.ts @@ -174,6 +174,14 @@ export function h
( children?: RawChildren | RawSlots ): VNode +// catch all types +export function h(type: string | Component, children?: RawChildren): VNode +export function h
( + type: string | Component
, + props?: (RawProps & P) | ({} extends P ? null : never), + children?: RawChildren | RawSlots +): VNode + // Actual implementation export function h(type: any, propsOrChildren?: any, children?: any): VNode { const l = arguments.length