// Advanced render function utilities
export { createVNode, cloneVNode, mergeProps, isVNode } from './vnode'
// VNode types
-export { Fragment, Text, Comment, Static } from './vnode'
+export { Fragment, Text, Comment, Static, VNodeRef } from './vnode'
// Built-in components
export { Teleport, TeleportProps } from './components/Teleport'
export { Suspense, SuspenseProps } from './components/Suspense'
import { convertLegacyVModelProps } from './compat/componentVModel'
import { defineLegacyVNodeProperties } from './compat/renderFn'
import { callWithAsyncErrorHandling, ErrorCodes } from './errorHandling'
+import { ComponentPublicInstance } from './componentPublicInstance'
export const Fragment = Symbol(__DEV__ ? 'Fragment' : undefined) as any as {
__isFragment: true
export type VNodeRef =
| string
| Ref
- | ((ref: object | null, refs: Record<string, any>) => void)
+ | ((
+ ref: Element | ComponentPublicInstance | null,
+ refs: Record<string, any>
+ ) => void)
export type VNodeNormalizedRefAtom = {
i: ComponentInternalInstance
* For examples and more information, visit:
* https://github.com/frenic/csstype#what-should-i-do-when-i-get-type-errors
*/
-
[v: `--${string}`]: string | number | undefined
}
type ReservedProps = {
key?: string | number | symbol
- ref?:
- | string
- | RuntimeCore.Ref
- | ((ref: Element | RuntimeCore.ComponentPublicInstance | null) => void)
+ ref?: RuntimeCore.VNodeRef
ref_for?: boolean
ref_key?: string
}
expectType<JSX.Element>(<Custom baz={1} />)
expectType<JSX.Element>(<Custom custom={1} baz={1} />)
expectType<JSX.Element>(<Custom bar="bar" baz={1} />)
+expectType<JSX.Element>(<Custom ref={''} bar="bar" baz={1} />)
// @ts-expect-error
expectType<JSX.Element>(<Custom />)
expectType<Component>(component)
})
+// #5969
+describe('should allow to assign props', () => {
+ const Child = defineComponent({
+ props: {
+ bar: String
+ }
+ })
+
+ const Parent = defineComponent({
+ props: {
+ ...Child.props,
+ foo: String
+ }
+ })
+
+ const child = new Child()
+ expectType<JSX.Element>(<Parent {...child.$props} />)
+})
+
// check if defineComponent can be exported
export default {
// function components