From e86cf14120632597592348ceb8f909dfa51c78bd Mon Sep 17 00:00:00 2001 From: Dmitry Gozman <dgozman@gmail.com> Date: Wed, 18 Mar 2020 15:00:42 -0700 Subject: [PATCH] feat(types): better types for nested handles References #1348. --- src/types.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/types.ts b/src/types.ts index 3cad1b4aebdb4..a9ad12b55bdce 100644 --- a/src/types.ts +++ b/src/types.ts @@ -18,7 +18,8 @@ import * as js from './javascript'; import * as dom from './dom'; import Injected from './injected/injected'; -type Boxed<Args extends any[]> = { [Index in keyof Args]: Args[Index] | js.JSHandle<Args[Index]> }; +type BoxedArg<Arg> = js.JSHandle<Arg> | (Arg extends object ? { [Key in keyof Arg]: BoxedArg<Arg[Key]> } : Arg); +type Boxed<Args extends any[]> = { [Index in keyof Args]: BoxedArg<Args[Index]> }; type PageFunction<Args extends any[], R = any> = string | ((...args: Args) => R | Promise<R>); type PageFunctionOn<On, Args extends any[], R = any> = string | ((on: On, ...args: Args) => R | Promise<R>); type PageFunctionWithInjected<On, Args extends any[], R = any> = string | ((injected: Injected, on: On, ...args: Args) => R | Promise<R>);