Skip to content

document.createTreewalker and document.createNodeIterator have missing signature types that which are supported both in IE, Firefox and Chrome #33462

Open
@mrttrifork

Description

@mrttrifork

Introduction

The third parameter filter in both functions needs to be a function in IE as described here https://stackoverflow.com/questions/45595349/ie9-ie-10-ie11-createnodeiterator-exception-occurred/45609439#45609439

Both Firefox and Chrome support this version as well as the object {acceptNode: (node: Node) => number} as third parameter.

In IE the fourth parameter entityReferenceExpansion is required.

A previous solution to document.createNodeIterator can be seen here #27393

The described solution is to override Document interface; But TypeScript still complains.

Also NodeIterator.referenceNode is required in lib.dom.d.ts, but in IE it is always undefined

TypeScript Version: 3.6.2

Search Terms:

createTreeWalker createNodeIterator IE Internet Explorer

Code that fails

const walker = document.createTreeWalker(
    wrapperElement,
    NodeFilter.SHOW_TEXT,
    function filter(node: Node): number {
        return NodeFilter.FILTER_ACCEPT;
    },
    false
);

const nodeIterator = document.createNodeIterator(
    wrapperElement,
    NodeFilter.SHOW_TEXT,
    function filter(node: Node): number {
        return NodeFilter.FILTER_ACCEPT;
    },
    false
);

Workaround

const walker = document.createTreeWalker(
    wrapperElement,
    NodeFilter.SHOW_TEXT,
    function filter(node: Node): number {
        return NodeFilter.FILTER_ACCEPT;
    } as any,
    false
);

function acceptNode(node: Node): number {
    return NodeFilter.FILTER_ACCEPT;
}
// "strictBindCallApply": false,
const nodeIterator
    = document.createNodeIterator.apply(document, [wrapperElement, NodeFilter.SHOW_ELEMENT, acceptNode, false]) as NodeIterator;

Expected behavior:
lib.dom.d.ts has

createTreeWalker(root: Node, whatToShow: number, filter: (node: Node) => number | null, entityReferenceExpansion: boolean): TreeWalker;
createNodeIterator(root: Node, whatToShow: number, filter: (node: Node) => number | null, entityReferenceExpansion: boolean): NodeIterator;

Actual behavior:
lib.dom.d.ts lacks the function signatures

Related Issues:
#27393

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugA bug in TypeScriptDomain: lib.d.tsThe issue relates to the different libraries shipped with TypeScript

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions