puppeteer/utils
Jack Franklin ea2b0d1f62
chore: improve type inference of evaluate (#7267)
This commit updates the JSHandle class to take a generic representing
the underlying object that it's wrapping. We can then define
`ElementHandle` as a class that extends `JSHandle<Element>` and begin
to get better type inference.

Prior to this commit the following code would have `d` set to `any`:

```
const div: page.$<HTMLDivElement>('div')
const text = await div.evaluate(d => d.innerText)
```

You could work around this in two ways:

```
const text = await div.evaluate<(d: HTMLDivElement) => string>(d => d.innerText)
const text = await div.evaluate((d: HTMLDivElement) => d.innerText)
```

But both of these have two issues:

1. Requires the user to type extra information.
2. There's no type checking: in the code above I could type `d` as
   `number` and TS would be happy.

With the change here to `evaluate` the user can now type the original
code:

```
const div: page.$<HTMLDivElement>('div')
const text = await div.evaluate(d => d.innerText)
```

And TypeScript will know that `d` is an `HTMLDivElement`.

This change brings us inline with the approach that @types/puppeteer
takes. If we land this and it works, we can do the same with
`evaluateHandle` to hopefully make a similar improvement there.

BREAKING: because this changes the types, which were previously `any`,
this is technically a breaking change as users using TS could start
getting errors after this change is released.
2021-05-26 13:46:17 +00:00
..
doclint chore: improve type inference of evaluate (#7267) 2021-05-26 13:46:17 +00:00
testserver chore: migrate tests to TypeScript (#6075) 2020-06-23 07:18:46 +02:00
apply_next_version.js fix(utils): typo fix (#6522) 2020-10-19 12:45:00 +02:00
bisect.js chore: add Prettier (#5825) 2020-05-07 12:54:55 +02:00
check_availability.js chore: upgrade and pin prettier dependencies (#7232) 2021-05-12 16:48:30 +02:00
ESTreeWalker.js chore: add Prettier (#5825) 2020-05-07 12:54:55 +02:00
fetch_devices.js chore: upgrade and pin prettier dependencies (#7232) 2021-05-12 16:48:30 +02:00
prepare_puppeteer_core.js chore: Don't store revisions in package.json (#6109) 2020-06-29 16:13:24 +01:00
remove_version_suffix.js chore: automate version bumps (#6627) 2020-11-26 11:38:24 +01:00