According to the API
interface Element extends Node {
find(selector: string): Element | null;
findAll(selector: string): HTMLElement[];
findAllSelf(selector: string): HTMLElement[];
}
interface HTMLElement extends Element {
find(selector: string): HTMLElement;
findAll(selector: string): HTMLElement[];
findAllSelf(selector: string): HTMLElement[];
}
interface DocumentFragment extends Node, NonElementParentNode, ParentNode {
find(selector: string): HTMLElement;
findAll(selector: string): HTMLElement[];
}
Actually only Element.find() return type is correct, all others are not.
find()might be unsuccessful and returnnull- All three functions can find
Elementthat is notHTMLElement, e.g.<svg>
Therefore the corrected types have to be
interface Element extends Node {
find(selector: string): Element | null;
findAll(selector: string): Element[];
findAllSelf(selector: string): Element[];
}
interface HTMLElement extends Element {
find(selector: string): Element | null;
findAll(selector: string): Element[];
findAllSelf(selector: string): Element[];
}
interface DocumentFragment extends Node, NonElementParentNode, ParentNode {
find(selector: string): Element | null;
findAll(selector: string): Element[];
}
Even more as HTMLElement extends Element, we don’t need to redefine exactly the same signature from Element
interface Element extends Node {
find(selector: string): Element | null;
findAll(selector: string): Element[];
findAllSelf(selector: string): Element[];
}
interface DocumentFragment extends Node, NonElementParentNode, ParentNode {
find(selector: string): Element | null;
findAll(selector: string): Element[];
}