// this is technically wrong, but in practice, it is correct. interface Element { querySelector( selectors: string ): E | null; querySelectorAll( selectors: string ): NodeListOf; } interface PromiseWithResolvers { promise: Promise; resolve: (value: T | PromiseLike) => void; reject: (reason?: any) => void; } interface PromiseConstructor { withResolvers(): PromiseWithResolvers; }