At first, Yes, it's the correct format in YAML (see for example ESLint - Configuring Plugins). As JSON, it would be

{
  "extends": [
    "airbnb-base",
    "plugin:angular/johnpapa",
    "ionic"
  ]
}

If you have multiple rulesets in your extend section, each following ruleset will extend or overwrite the previous ones. So you will only have one setting for each rule (see ESLint - Extending Configuration Files) Sometimes when the rules from the shareable configs are conflicting and you can't define a specific order for the extend section you have to manually define this specific rule in you rules section.

So the answer to you second question is: No, you won't get the same error multiple times.

Answer from Sven 31415 on Stack Overflow
🌐
ESLint
eslint.org › docs › latest › rules
Rules Reference - ESLint - Pluggable JavaScript Linter
These rules from older versions of ESLint (before the deprecation policy existed) have been replaced by newer rules:
🌐
ESLint
eslint.org › docs › latest › use › configure › configuration-files
Configuration Files - ESLint - Pluggable JavaScript Linter
A configuration object uses extends to inherit all the traits of another configuration object or array (including rules, plugins, and language options) and can then modify all the options.
🌐
ESLint
eslint.org › docs › latest › extend
Extend ESLint - ESLint - Pluggable JavaScript Linter
This page summarizes the various ways that you can extend ESLint and how these extensions all fit together. You’ve developed custom rules for ESLint and you want to share them with the community.
🌐
ESLint
eslint.org › docs › latest › use › configure › rules
Configure Rules - ESLint - Pluggable JavaScript Linter
Rules can also contain additional configuration options specific to that rule. ESLint comes with a large number of built-in rules and you can add more rules through plugins.
🌐
ESLint
eslint.org › docs › latest › extend › custom-rules
Custom Rules - ESLint - Pluggable JavaScript Linter
The core rules shipped in the eslint package are not considered part of the public API and are not designed to be extended from. Building on top of these rules is fragile and will most likely result in your rules breaking completely at some ...
🌐
ESLint
eslint.org › docs › latest › extend › ways-to-extend
Ways to Extend ESLint - ESLint - Pluggable JavaScript Linter
The rules include things like enforcing consistent usage of React component lifecycle methods and requiring the use of key props when rendering dynamic lists. To learn more about creating the extensions you can include in a plugin, refer to ...
🌐
GitHub
github.com › eslint › eslint › issues › 9192
Extending rule options in derived configs? · Issue #9192 · eslint/eslint
March 24, 2017 - The extendConfiguration method takes two arguments: old options, and new options (in both cases with severities removed). It should return an options object that (ideally) contains a merging of the two sets of options, in whatever way makes ...
Published   Sep 01, 2017
🌐
Prateeksurana
prateeksurana.me › blog › difference-between-eslint-extends-and-plugins
What is the difference between extends and plugins in ESLint config
So to summarize in this article we saw a brief overview of what ESLInt is and how ESLint plugins provide you with custom rules that you can individually apply according to your needs, and how the extends key in your configs lets you extend from other shareable configs.
Find elsewhere
🌐
ESLint
denar90.github.io › eslint.github.io › docs › user-guide › configuring
Configuring ESLint
ESLint extends configurations recursively so a base configuration can also have an extends property. The rules property can do any of the following to extend (or override) the set of rules:
🌐
Stack Overflow
stackoverflow.com › questions › 77061899 › how-to-extend-and-override-rules-config-in-eslint
How to extend and override rules config in ESLint?
{ "extends": ["next", "prettier"], "plugins": ["prettier", "@typescript-eslint", "unused-imports"], "rules": { "no-unused-vars": "off", "no-duplicate-imports": "off", "no-console": "warn", "no-return-await": "warn", "no-useless-return": "warn", "no-var": "warn", "react-hooks/exhaustive-deps": "off", "import/order": [ "warn", { "groups": ["type", "builtin", "external", "internal", "parent", "sibling", "index", "object"], "newlines-between": "always" } ], } }
🌐
TypeScript ESlint
typescript-eslint.io › users › configs
Shared Configs | typescript-eslint
We recommend that most projects ... starting points, but you don't need to use them as-is. ESLint allows configuring own rule settings on top of extended configurations....
🌐
GitHub
github.com › eslint › eslint › discussions › 15704
Issue with the `extends` priority · eslint/eslint · Discussion #15704
If you manually include that rule with the preferred definition in your config's rules property object it will be used over the extensions. { extends: ['airbnb-typescript', 'plugin:@typescript-eslint/recommended'], rules: { '@typescript-eslint/no-empty-function': ['error'], }, };
Author   eslint
🌐
ESLint
eslint.org › docs › latest › use › configure › plugins
Configure Plugins - ESLint - Pluggable JavaScript Linter
You can extend ESLint with plugins in a variety of different ways. Plugins can include: Custom rules to validate if your code meets a certain expectation, and what to do if it does not meet that expectation.
🌐
Next.js
nextjs.org › docs › app › api-reference › config › eslint
Configuration: ESLint | Next.js
2 weeks ago - ESLint also contains code formatting rules, which can conflict with your existing Prettier setup.
🌐
TypeScript ESlint
typescript-eslint.io › rules
Overview | typescript-eslint
Extension rules generally completely replace the base rule from ESLint core. If the base rule is enabled in a config you extend from, you'll need to disable the base rule:
🌐
ESLint
eslint.org › docs › latest › use › getting-started
Getting Started with ESLint - ESLint - Pluggable JavaScript Linter
ESLint is completely pluggable. Every single rule is a plugin and you can add more at runtime. You can also add community plugins, configurations, and parsers to extend the functionality of ESLint.
🌐
ESLint
eslint.org › blog › 2025 › 03 › flat-config-extends-define-config-global-ignores
Evolving flat config with extends - ESLint - Pluggable JavaScript Linter
import { defineConfig } from "eslint/config"; import js from "@eslint/js"; import tailwind from "eslint-plugin-tailwindcss"; import reactPlugin from "eslint-plugin-react"; import eslintPluginImportX from "eslint-plugin-import-x"; import exampleConfigs from "eslint-config-example"; export default defineConfig( { files: ["**/*.js"], plugins: { js, tailwind }, extends: [ "js/recommended", // load from js.configs.recommended "tailwind/flat/recommended", // load from tailwind.configs['flat/recommended'] reactPlugin.configs.flat.recommended, eslintPluginImportX.flatConfigs.recommended, ] }, // apply an array config to a subset of files { files: ["**/src/safe/*.js"], extends: [exampleConfigs] }, // your modifications { rules: { "no-unused-vars": "warn" } } ); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 Copy code to clipboard ·
🌐
ESLint
eslint.org › docs › latest › use › configure › migration-guide
Configuration Migration Guide - ESLint - Pluggable JavaScript Linter
In eslintrc files, use the extends property to use predefined and shareable configs. ESLint comes with two predefined configs that you can access as strings: "eslint:recommended": the rules recommended by ESLint.
🌐
ESLint
eslint.org › docs › latest › use › configure
Configure ESLint - ESLint - Pluggable JavaScript Linter
Here are some of the options that you can configure in ESLint: Globals - the additional global variables your script accesses during execution. Rules - which rules are enabled and at what error level.