UNPKG

basic-pragma

Version:

Configurable JSX pragma using a basic vdom

38 lines (37 loc) 1.48 kB
/** @noSelfInFile */ import { ComponentType } from "./Component"; export declare type EmptyObject = Record<string, never>; export declare type PropChildren<P> = P extends { children: (infer C)[]; } ? (C[] | C | undefined) : P extends { children: infer C; } ? C : Children; export declare type NodeProps<P> = Omit<P, "children"> & ("children" extends keyof P ? { children: PropChildren<P>; } : { children?: PropChildren<P>; }); export interface VNode<P = EmptyObject> { type: string | ComponentType<P>; props: NodeProps<P>; key?: string | number; } export declare type Child = VNode<any> | string | boolean | null | undefined; export declare type Children = Child | Children[]; declare type InputProps<P> = keyof Omit<P, "children"> extends never ? (EmptyObject | null) : P extends { children: unknown; } ? Omit<P, "children"> : P; declare type InputChildren<P> = P extends { children: (infer C)[]; } ? C[] : P extends { children: infer C; } ? [C] : Children[]; declare type CreateElement = { <P>(type: ComponentType<P>, props: InputProps<P>, ...children: InputChildren<P>): VNode<any>; <T extends keyof JSX.IntrinsicElements, P extends JSX.IntrinsicElements[T]>(type: T, props: InputProps<P>, ...children: InputChildren<P>): VNode<any>; }; export declare const createElement: CreateElement; export declare const Fragment: ({ children }: { children?: Children; }) => string | boolean | VNode<any> | Children[] | null; export {};