diff --git a/src/index.d.ts b/src/index.d.ts index 06fe433fa5..cbf8040120 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -275,9 +275,19 @@ export namespace h { // Preact render // ----------------------------------- +interface ContainerNode { + nodeType: Node['nodeType']; + parentNode: Node['parentNode']; + firstChild: Node['firstChild']; + insertBefore: Node['insertBefore']; + appendChild: Node['appendChild']; + removeChild: Node['removeChild']; + childNodes: ArrayLike +} + export function render( vnode: ComponentChild, - parent: Element | Document | ShadowRoot | DocumentFragment + parent: ContainerNode ): void; /** * @deprecated Will be removed in v11. @@ -286,12 +296,12 @@ export function render( */ export function render( vnode: ComponentChild, - parent: Element | Document | ShadowRoot | DocumentFragment, + parent: ContainerNode, replaceNode?: Element | Text ): void; export function hydrate( vnode: ComponentChild, - parent: Element | Document | ShadowRoot | DocumentFragment + parent: ContainerNode ): void; export function cloneElement( vnode: VNode, diff --git a/test/ts/preact.tsx b/test/ts/preact.tsx index 9f13a2ab43..fe6f5e7441 100644 --- a/test/ts/preact.tsx +++ b/test/ts/preact.tsx @@ -79,6 +79,12 @@ render( document ); +// Mounting into different types of Nodes +render(h('div', {}), document.createElement('div')); +render(h('div', {}), document); +render(h('div', {}), document.createElement('div').shadowRoot!); +render(h('div', {}), document.createDocumentFragment()); + // Accessing children const ComponentWithChildren: FunctionalComponent = ({ input,