types: further tweak createElement type inference

This commit is contained in:
Evan You 2018-10-12 22:07:08 -04:00
parent 5257b366fd
commit 2599580bca

View File

@ -54,53 +54,51 @@ type OptionsComponent<P> =
| (ComponentOptions<P> & { template: string })
| (ComponentOptions<P> & { render: Function })
// TODO improve return type with props information
interface createElement extends VNodeFactories {
// element
(tag: string, children?: RawChildrenType): VNode
(
tag: string,
// TODO support native element properties
data?: VNodeData & Differ | null,
children?: RawChildrenType | RawSlots
): VNode
(tag: string, children?: RawChildrenType): VNode
// fragment
(tag: typeof Fragment, children?: RawChildrenType): VNode
(
tag: typeof Fragment,
data?: ({ key?: Key } & Differ) | null,
children?: RawChildrenType | RawSlots
): VNode
(tag: typeof Fragment, children?: RawChildrenType): VNode
// portal
(tag: typeof Portal, children?: RawChildrenType): VNode
(
tag: typeof Portal,
data?: ({ target: any } & BuiltInProps & Differ) | null,
children?: RawChildrenType | RawSlots
): VNode
(tag: typeof Portal, children?: RawChildrenType): VNode
// object
<P>(tag: OptionsComponent<P>, children?: RawChildrenType): VNode
<P>(
tag: OptionsComponent<P>,
data?: (P & BuiltInProps & Differ) | null,
children?: RawChildrenType | RawSlots
): VNode
<P>(tag: OptionsComponent<P>, children?: RawChildrenType): VNode
// functional
<P>(tag: FunctionalComponent<P>, children?: RawChildrenType): VNode
<P>(
tag: FunctionalComponent<P>,
data?: (P & BuiltInProps & Differ) | null,
children?: RawChildrenType | RawSlots
): VNode
<P>(tag: FunctionalComponent<P>, children?: RawChildrenType): VNode
// class
<P, T extends ComponentInstance<P>>(
tag: new () => T & { $props: P },
<P>(tag: new () => ComponentInstance<P>, children?: RawChildrenType): VNode
<P>(
tag: new () => ComponentInstance<P>,
data?: (P & BuiltInProps & Differ) | null,
children?: RawChildrenType | RawSlots
): VNode
<P, T extends ComponentInstance<P>>(
tag: new () => T & { $props: P },
children?: RawChildrenType
): VNode
}
export const h = ((tag: ElementType, data?: any, children?: any): VNode => {