import { ComponentInstance } from './component'
import { VNode, NormalizedChildren, normalizeVNode, VNodeChild } from './vnode'
-import { isArray, isObject, isFunction } from '@vue/shared'
+import { isArray, isFunction } from '@vue/shared'
+import { SLOTS_CHILDREN } from './typeFlags'
export type Slot = (...args: any[]) => VNode[]
export type Slots = Readonly<{
children: NormalizedChildren
) {
let slots: Slots | void
- if (isObject(children) && !isArray(children)) {
+ if (instance.vnode.shapeFlag & SLOTS_CHILDREN) {
// pre-normalized slots object generated by compiler
if ((children as any)._normalized) {
slots = children as Slots
} else {
slots = {}
- for (const key in children) {
- let value = children[key]
+ for (const key in children as RawSlots) {
+ let value = (children as RawSlots)[key]
if (isFunction(value)) {
;(slots as any)[key] = normalizeSlot(value)
} else {
}
}
}
- } else if (children != null) {
- // Array, string or null.
- // non object children passed to a component
+ } else if (children !== null) {
+ // non slot object children (direct value) passed to a component
if (__DEV__) {
// TODO show tip on using functions
console.log('use function slots!')