mirror of https://github.com/vuejs/core.git
fix(types): fix functional component for `h` (#9991)
- stricter children/slots type - fix emits/`EE` type argument of `FunctionalComponent`
This commit is contained in:
parent
2fd3905738
commit
438a74aad8
|
@ -2,8 +2,10 @@ import {
|
|||
type Component,
|
||||
type DefineComponent,
|
||||
Fragment,
|
||||
type FunctionalComponent,
|
||||
Suspense,
|
||||
Teleport,
|
||||
type VNode,
|
||||
defineComponent,
|
||||
h,
|
||||
ref,
|
||||
|
@ -77,6 +79,19 @@ describe('h inference w/ Suspense', () => {
|
|||
h(Suspense, { onResolve: 1 })
|
||||
})
|
||||
|
||||
declare const fc: FunctionalComponent<
|
||||
{
|
||||
foo: string
|
||||
bar?: number
|
||||
onClick: (evt: MouseEvent) => void
|
||||
},
|
||||
['click'],
|
||||
{
|
||||
default: () => VNode
|
||||
title: (scope: { id: number }) => VNode
|
||||
}
|
||||
>
|
||||
declare const vnode: VNode
|
||||
describe('h inference w/ functional component', () => {
|
||||
const Func = (_props: { foo: string; bar?: number }) => ''
|
||||
h(Func, { foo: 'hello' })
|
||||
|
@ -87,6 +102,15 @@ describe('h inference w/ functional component', () => {
|
|||
h(Func, {})
|
||||
// @ts-expect-error
|
||||
h(Func, { bar: 123 })
|
||||
|
||||
h(
|
||||
fc,
|
||||
{ foo: 'hello', onClick: () => {} },
|
||||
{
|
||||
default: () => vnode,
|
||||
title: ({ id }: { id: number }) => vnode,
|
||||
},
|
||||
)
|
||||
})
|
||||
|
||||
describe('h support w/ plain object component', () => {
|
||||
|
|
|
@ -10,7 +10,7 @@ import {
|
|||
} from './vnode'
|
||||
import type { Teleport, TeleportProps } from './components/Teleport'
|
||||
import type { Suspense, SuspenseProps } from './components/Suspense'
|
||||
import { isArray, isObject } from '@vue/shared'
|
||||
import { type IfAny, isArray, isObject } from '@vue/shared'
|
||||
import type { RawSlots } from './componentSlots'
|
||||
import type {
|
||||
Component,
|
||||
|
@ -140,11 +140,11 @@ export function h(
|
|||
export function h<
|
||||
P,
|
||||
E extends EmitsOptions = {},
|
||||
S extends Record<string, any> = {},
|
||||
S extends Record<string, any> = any,
|
||||
>(
|
||||
type: FunctionalComponent<P, E, S>,
|
||||
type: FunctionalComponent<P, any, S, any>,
|
||||
props?: (RawProps & P) | ({} extends P ? null : never),
|
||||
children?: RawChildren | RawSlots,
|
||||
children?: RawChildren | IfAny<S, RawSlots, S>,
|
||||
): VNode
|
||||
|
||||
// catch-all for generic component types
|
||||
|
|
Loading…
Reference in New Issue