Skip to content

Two TS linting errors in main.ts #34267

Description

@hb20007

Command

new

Is this a regression?

  • Yes, this behavior used to work in the previous version

The previous version in which this bug was not present was

No response

Description

ng new generates boilerplate that contains two linting errors. They appear when linting with type information:

<path>\src\main.ts
  6:11  error  Prefer the safe `: unknown` for a `catch` callback variable                                                         @typescript-eslint/use-unknown-in-catch-callback-variable
  6:19  error  Returning a void expression from an arrow function shorthand is forbidden. Please add braces to the arrow function  @typescript-eslint/no-confusing-void-expression

The two issues can be fixed by changing the offending code to:

bootstrapApplication(App, appConfig).catch((err: unknown) => {
  console.error(err);
});

See the ts-eslint doc pages for no-confusing-void-expression and use-unknown-in-catch-callback-variable.

Minimal Reproduction

  1. Generate a new project with ng new.
  2. Run ng add @angular-eslint/schematics to add eslint.
  3. In eslint.config.js, change tseslintConfigs.recommended to tseslint.configs.strictTypeChecked.
  4. Add languageOptions.parserOptions as described in the ts-eslint docs.
  5. Run ng lint.

Exception or Error


Your Environment

Angular CLI       : 22.0.1
Angular           : 22.0.1
Node.js           : 26.9.0
Package Manager   : npm 11.16.0
Operating System  : win32 x64

Anything else relevant?

TS 7.1 is expected to bring a faster typed linting API, so typed linting will become even more common.

Activity

  1. added this to the needsTriage milestone on Oct 6, 2026
  2. added a commit that references this issue on Oct 7, 2026
    5f1b49b
  3. alan-agius4 commented on Oct 7, 2026

    @alan-agius4
    Collaborator

    Thanks for reporting this.

    The code generated by ng new is designed to comply with TypeScript's strict mode as configured in the generated tsconfig.json, as well as the default configuration provided by @angular-eslint/schematics (tseslint.configs.recommended).

    Because third-party linter presets like strictTypeChecked are opt-in, opinionated, and can conflict with other common lint rules (for example, arrow-body-style), we don't tailor the default project templates to satisfy non-default third-party lint configurations. When opting into stricter custom ESLint rulesets after generating a workspace, we recommend running ng lint --fix or updating the generated files to match your preferred ruleset.

  4. hb20007 commented on Oct 7, 2026

    @hb20007
    Author

    @alan-agius4 Fair point; I'm providing a counterargument in case it can be reconsidered.

    strictTypeChecked is not a "third-party" preset but a native typescript-eslint preset. It is not supposed to be "opinionated", since there is a separate set of rules for opinionated rules (stylistic and stylisticTypeChecked).

    The no-confusing-void-expression error reported is a legit type error. The err => console.error(err) actually returns the result of console.error(err), which returns void. That's why it should be in {}. It does not conflict with arrow-body-style since that's for cases where the function is actually returning something.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions