From bccdab25a19039ea8952f2b4e43c5f4d0b8f10d6 Mon Sep 17 00:00:00 2001 From: Joel Einbinder Date: Tue, 31 Mar 2020 03:59:25 -0700 Subject: [PATCH] fix(types): correctly infer type in $eval and $$eval --- utils/generate_types/overrides.d.ts | 12 ++++++------ utils/generate_types/test/test.ts | 9 ++++++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/utils/generate_types/overrides.d.ts b/utils/generate_types/overrides.d.ts index 3ce6f90f62708..a923f78c11439 100644 --- a/utils/generate_types/overrides.d.ts +++ b/utils/generate_types/overrides.d.ts @@ -56,12 +56,12 @@ export interface Page { $eval(selector: K, pageFunction: PageFunctionOn, arg: Arg): Promise; $eval(selector: string, pageFunction: PageFunctionOn, arg: Arg): Promise; - $eval(selector: string, pageFunction: PageFunctionOn, arg?: any): Promise; + $eval(selector: K, pageFunction: PageFunctionOn, arg?: any): Promise; $eval(selector: string, pageFunction: PageFunctionOn, arg?: any): Promise; $$eval(selector: K, pageFunction: PageFunctionOn, arg: Arg): Promise; $$eval(selector: string, pageFunction: PageFunctionOn, arg: Arg): Promise; - $$eval(selector: string, pageFunction: PageFunctionOn, arg?: any): Promise; + $$eval(selector: K, pageFunction: PageFunctionOn, arg?: any): Promise; $$eval(selector: string, pageFunction: PageFunctionOn, arg?: any): Promise; waitForFunction(pageFunction: PageFunction, arg: Arg, options?: PageWaitForFunctionOptions): Promise>; @@ -88,12 +88,12 @@ export interface Frame { $eval(selector: K, pageFunction: PageFunctionOn, arg: Arg): Promise; $eval(selector: string, pageFunction: PageFunctionOn, arg: Arg): Promise; - $eval(selector: string, pageFunction: PageFunctionOn, arg?: any): Promise; + $eval(selector: K, pageFunction: PageFunctionOn, arg?: any): Promise; $eval(selector: string, pageFunction: PageFunctionOn, arg?: any): Promise; $$eval(selector: K, pageFunction: PageFunctionOn, arg: Arg): Promise; $$eval(selector: string, pageFunction: PageFunctionOn, arg: Arg): Promise; - $$eval(selector: string, pageFunction: PageFunctionOn, arg?: any): Promise; + $$eval(selector: K, pageFunction: PageFunctionOn, arg?: any): Promise; $$eval(selector: string, pageFunction: PageFunctionOn, arg?: any): Promise; waitForFunction(pageFunction: PageFunction, arg: Arg, options?: PageWaitForFunctionOptions): Promise>; @@ -133,12 +133,12 @@ export interface ElementHandle extends JSHandle { $eval(selector: K, pageFunction: PageFunctionOn, arg: Arg): Promise; $eval(selector: string, pageFunction: PageFunctionOn, arg: Arg): Promise; - $eval(selector: string, pageFunction: PageFunctionOn, arg?: any): Promise; + $eval(selector: K, pageFunction: PageFunctionOn, arg?: any): Promise; $eval(selector: string, pageFunction: PageFunctionOn, arg?: any): Promise; $$eval(selector: K, pageFunction: PageFunctionOn, arg: Arg): Promise; $$eval(selector: string, pageFunction: PageFunctionOn, arg: Arg): Promise; - $$eval(selector: string, pageFunction: PageFunctionOn, arg?: any): Promise; + $$eval(selector: K, pageFunction: PageFunctionOn, arg?: any): Promise; $$eval(selector: string, pageFunction: PageFunctionOn, arg?: any): Promise; } diff --git a/utils/generate_types/test/test.ts b/utils/generate_types/test/test.ts index 90804708687dd..b040d60a8d5ae 100644 --- a/utils/generate_types/test/test.ts +++ b/utils/generate_types/test/test.ts @@ -286,7 +286,14 @@ playwright.chromium.launch().then(async browser => { console.log(elements.map(x => x)[0].textContent); return elements[3].innerHTML; }); - + { + const value = await page.$eval('input', i => i.disabled); + const assertion: AssertType = true; + } + { + const value = await page.$$eval('input', i => i[0].defaultValue); + const assertion: AssertType = true; + } browser.close(); })();