fix(types): improve `h` overload to support union of string and component (#5432)

fix #5431
This commit is contained in:
Carlos Rodrigues 2023-10-23 16:40:06 +01:00 committed by GitHub
parent f36c49f31b
commit 16ecb44c89
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 0 deletions

View File

@ -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, {}, [])
})

View File

@ -174,6 +174,14 @@ export function h<P>(
children?: RawChildren | RawSlots
): VNode
// catch all types
export function h(type: string | Component, children?: RawChildren): VNode
export function h<P>(
type: string | Component<P>,
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