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
Element
that 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[];
}