From a41c85b38124e39c66325f0e00b46c2844e2f588 Mon Sep 17 00:00:00 2001 From: 38elements Date: Sat, 27 Apr 2019 12:16:02 +0900 Subject: [PATCH] Update type definition --- src/create-element.js | 2 +- src/diff/index.js | 2 +- src/index.d.ts | 10 +++++++--- src/internal.d.ts | 1 + src/render.js | 2 +- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/create-element.js b/src/create-element.js index 1bacba96a7..64cba6205d 100644 --- a/src/create-element.js +++ b/src/create-element.js @@ -82,7 +82,7 @@ export /* istanbul ignore next */ function Fragment() { } * Specifically, this should be used anywhere a user could provide a boolean, string, or number where * a VNode or Component is desired instead * @param {boolean | string | number | import('./internal').VNode} possibleVNode A possible VNode - * @returns {import('./internal').VNode} + * @returns {import('./internal').VNode | null} */ export function coerceToVNode(possibleVNode) { if (possibleVNode == null || typeof possibleVNode === 'boolean') return null; diff --git a/src/diff/index.js b/src/diff/index.js index b61b69aabb..2d6d96eef2 100644 --- a/src/diff/index.js +++ b/src/diff/index.js @@ -20,7 +20,7 @@ import options from '../options'; * mounted components * @param {import('../internal').Component | null} ancestorComponent The direct * parent component - * @param {Node | Text} oldDom The current attached DOM + * @param {Element | Text} oldDom The current attached DOM * element any new dom elements should be placed around. Likely `null` on first * render (except when hydrating). Can be a sibling DOM element when diffing * Fragments that have siblings. In most cases, it starts out as `oldChildren[0]._dom`. diff --git a/src/index.d.ts b/src/index.d.ts index 9fc9bca4b7..3f7d736309 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -117,7 +117,7 @@ declare namespace preact { state: Readonly; props: RenderableProps

; context: any; - base?: HTMLElement; + base?: Element | Text; // From https://github.com/DefinitelyTyped/DefinitelyTyped/blob/e836acc75a78cf0655b5dfdbe81d69fdd4d8a252/types/react/index.d.ts#L402 // // We MUST keep setState() as a unified signature because it allows proper checking of the method return type. @@ -160,8 +160,12 @@ declare namespace preact { // Preact render // ----------------------------------- - function render(vnode: ComponentChild, parent: Element | Document | ShadowRoot | DocumentFragment): void - function hydrate(vnode: ComponentChild, parent: Element | Document | ShadowRoot | DocumentFragment): void + function render( + vnode: ComponentChild, + parent: Element | Document | ShadowRoot | DocumentFragment, + replaceNode?: Element | Text + ): void; + function hydrate(vnode: ComponentChild, parent: Element | Document | ShadowRoot | DocumentFragment): void; function cloneElement(vnode: JSX.Element, props: any, ...children: ComponentChildren[]): JSX.Element; // diff --git a/src/internal.d.ts b/src/internal.d.ts index 3745df0115..64abf33b6d 100644 --- a/src/internal.d.ts +++ b/src/internal.d.ts @@ -25,6 +25,7 @@ export interface PreactElement extends HTMLElement { export interface VNode

extends preact.VNode

{ // Redefine type here using our internal ComponentFactory type type: string | ComponentFactory

| null; + _self: this; _children: Array | null; /** * The [first (for Fragments)] DOM child of a VNode diff --git a/src/render.js b/src/render.js index d3f4cb6ae6..b6457f124b 100644 --- a/src/render.js +++ b/src/render.js @@ -9,7 +9,7 @@ import options from './options'; * @param {import('./index').ComponentChild} vnode The virtual node to render * @param {import('./internal').PreactElement} parentDom The DOM element to * render into - * @param {import('./dom').PreactElement} [replaceNode] Attempt to re-use an + * @param {Element | Text} [replaceNode] Attempt to re-use an * existing DOM tree rooted at `replaceNode` */ export function render(vnode, parentDom, replaceNode) {