Browse Source

fix: h.* shorthands should expect correct args type

Evan You 7 years ago
parent
commit
aafecb319d
1 changed files with 9 additions and 7 deletions
  1. 9 7
      packages/core/src/vdom.ts

+ 9 - 7
packages/core/src/vdom.ts

@@ -57,6 +57,8 @@ export type VNodeChildren =
   | string // TEXT
   | null
 
+export type RawVNodeChildren = VNodeChildren | unknown[]
+
 export type Key = string | number
 
 export type Ref = (t: RenderNode | MountedComponent | null) => void
@@ -71,7 +73,7 @@ export function createVNode(
   flags: VNodeFlags,
   tag: string | FunctionalComponent | ComponentClass | RenderNode | null,
   data: VNodeData | null,
-  children: VNodeChildren | null,
+  children: RawVNodeChildren | null,
   childFlags: ChildrenFlags,
   key: Key | null | undefined,
   ref: Ref | null | undefined,
@@ -82,7 +84,7 @@ export function createVNode(
     flags,
     tag,
     data,
-    children,
+    children: children as VNodeChildren,
     childFlags,
     key: key === void 0 ? null : key,
     ref: ref === void 0 ? null : ref,
@@ -108,7 +110,7 @@ function normalizeClassAndStyle(data: VNodeData) {
 export function createElementVNode(
   tag: string,
   data: VNodeData | null,
-  children: VNodeChildren,
+  children: RawVNodeChildren | null,
   childFlags: ChildrenFlags,
   key?: Key | null,
   ref?: Ref | null
@@ -123,7 +125,7 @@ export function createElementVNode(
 export function createComponentVNode(
   comp: any,
   data: VNodeData | null,
-  children: VNodeChildren | Slots,
+  children: RawVNodeChildren | Slots,
   childFlags: ChildrenFlags,
   key?: Key | null,
   ref?: Ref | null
@@ -180,7 +182,7 @@ export function createComponentVNode(
       if (childrenType === 'function') {
         // function as children
         slots = { default: children }
-      } else if (Array.isArray(children) || (children as VNode)._isVNode) {
+      } else if (Array.isArray(children) || (children as any)._isVNode) {
         // direct vnode children
         slots = { default: () => children }
       } else if (typeof children === 'object') {
@@ -222,7 +224,7 @@ export function createTextVNode(text: string): VNode {
 }
 
 export function createFragment(
-  children: VNodeChildren,
+  children: RawVNodeChildren,
   childFlags?: ChildrenFlags,
   key?: Key | null
 ) {
@@ -240,7 +242,7 @@ export function createFragment(
 
 export function createPortal(
   target: RenderNode | string,
-  children: VNodeChildren,
+  children: RawVNodeChildren,
   childFlags?: ChildrenFlags,
   key?: Key | null,
   ref?: Ref | null