In #38647, @balazsorban44 has migrated the rule `no-img-element` to
typescript. The PR follows #38647 by migrating the entire
`eslint-plugin-next` to use typescript. Note it is still possible to
write new rules in javascript.
The PR does the following things:
- Migrates all `utils` to typescript
- All previous JSDoc are also converted to the type definitions
- Creates a utility method `defineRule`
- This is a stub function to provide the type check ability.
- With the `defineRule` we don't have to tediously import type
definition `Rule.RuleMetaData` and `Rule.RuleModule['create']` from
`eslint` anymore, `defineRule` will provide auto-complete and
typechecking for `meta` and `create`.
- Migrates all rules to typescript
- Extra type guards are also added to make typescript happy.
All existing `eslint-config-next` unit test cases passed after the
migration.
Follow-up on https://github.com/vercel/next.js/pull/38534#pullrequestreview-1035020450
This lets us use modern JS/TS syntax in ESLint rules and avoid issues like #38530 and #36693
## Bug
- [ ] Related issues linked using `fixes #number`
- [ ] Integration tests added
- [ ] Errors have helpful link attached, see `contributing.md`
## Feature
- [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR.
- [ ] Related issues linked using `fixes #number`
- [ ] Integration tests added
- [ ] Documentation added
- [ ] Telemetry added. In case of a feature if it's used or not.
- [ ] Errors have helpful link attached, see `contributing.md`
## Documentation / Examples
- [ ] Make sure the linting passes by running `pnpm lint`
- [ ] The examples guidelines are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing.md#adding-examples)
Co-authored-by: JJ Kasper <22380829+ijjk@users.noreply.github.com>