{"id":14978334,"url":"https://github.com/rfgamaral/eslint-config-typescript-unified","last_synced_at":"2025-10-28T08:32:10.956Z","repository":{"id":35433786,"uuid":"217526359","full_name":"rfgamaral/eslint-config-typescript-unified","owner":"rfgamaral","description":"🛠️ A unified ESLint configuration with sensible defaults for TypeScript projects.","archived":false,"fork":false,"pushed_at":"2024-10-29T14:22:17.000Z","size":1426,"stargazers_count":16,"open_issues_count":32,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-10-29T17:32:35.004Z","etag":null,"topics":["airbnb","eslint","eslint-config","prettier","react","react-hooks","reactjs","styleguide","typescript","unified"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rfgamaral.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-25T12:13:36.000Z","updated_at":"2023-08-25T01:40:15.000Z","dependencies_parsed_at":"2023-11-07T02:29:50.414Z","dependency_job_id":"df190f67-af7b-496e-8dc3-7af33186e817","html_url":"https://github.com/rfgamaral/eslint-config-typescript-unified","commit_stats":{"total_commits":378,"total_committers":6,"mean_commits":63.0,"dds":0.5,"last_synced_commit":"2edd3d3b1fa4d98b6c8a498c72435af44e1c8115"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rfgamaral%2Feslint-config-typescript-unified","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rfgamaral%2Feslint-config-typescript-unified/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rfgamaral%2Feslint-config-typescript-unified/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rfgamaral%2Feslint-config-typescript-unified/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rfgamaral","download_url":"https://codeload.github.com/rfgamaral/eslint-config-typescript-unified/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238623523,"owners_count":19503054,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["airbnb","eslint","eslint-config","prettier","react","react-hooks","reactjs","styleguide","typescript","unified"],"created_at":"2024-09-24T13:57:25.857Z","updated_at":"2025-10-28T08:32:10.581Z","avatar_url":"https://github.com/rfgamaral.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @rfgamaral/eslint-config-typescript-unified\n\n[![development ci](https://github.com/rfgamaral/eslint-config-typescript-unified/workflows/Development%20CI/badge.svg)](https://github.com/rfgamaral/eslint-config-typescript-unified/actions?query=workflow%3A%22Development+CI%22)\n[![codecov](https://codecov.io/gh/rfgamaral/eslint-config-typescript-unified/branch/master/graph/badge.svg)](https://codecov.io/gh/rfgamaral/eslint-config-typescript-unified)\n[![npm](https://img.shields.io/npm/v/@rfgamaral/eslint-config-typescript-unified.svg)](https://www.npmjs.com/package/@rfgamaral/eslint-config-typescript-unified)\n[![minified size](https://img.shields.io/bundlephobia/min/@rfgamaral/eslint-config-typescript-unified.svg)](https://bundlephobia.com/result?p=@rfgamaral/eslint-config-typescript-unified)\n[![downloads](https://img.shields.io/npm/dt/@rfgamaral/eslint-config-typescript-unified.svg)](https://www.npmtrends.com/@rfgamaral/eslint-config-typescript-unified)\n[![commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![license](https://img.shields.io/npm/l/@rfgamaral/eslint-config-typescript-unified.svg)](LICENSE)\n\nA unified [ESLint](https://eslint.org/) configuration with sensible defaults for [TypeScript](https://www.typescriptlang.org/) projects.\n\n## Installation\n\nThis package provides multiple [ESLint Shareable Configurations](https://eslint.org/docs/developer-guide/shareable-configs) for your convenience. To make use of any of them, you must first install [`eslint`](https://github.com/eslint/eslint), [`prettier`](https://github.com/prettier/prettier) and [`typescript`](https://github.com/Microsoft/TypeScript) since this package does not do it for you. Then install it with:\n\n```sh\nnpm install --save-dev @rfgamaral/eslint-config-typescript-unified\n```\n\n## Usage\n\nOnce `@rfgamaral/eslint-config-typescript-unified` is installed, you can use any of the available configurations in the [`extends`](https://eslint.org/docs/user-guide/configuring#extending-configuration-files) section of your [ESLint configuration](https://eslint.org/docs/user-guide/configuring).\n\n### Default\n\nDefault configuration with recommended rules from [`@typescript-eslint/eslint-plugin`](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin) and [`eslint-plugin-prettier`](https://github.com/prettier/eslint-plugin-prettier):\n\n```json\n{\n  \"extends\": \"@rfgamaral/eslint-config-typescript-unified\"\n}\n```\n\n### ESLint\n\nExtends the default configuration with [recommended rules](https://eslint.org/docs/rules/) from ESLint:\n\n```json\n{\n  \"extends\": \"@rfgamaral/eslint-config-typescript-unified/eslint\"\n}\n```\n\n### Airbnb\n\nExtends the default configuration with [base rules](https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb-base) from Aribnb:\n\n```json\n{\n  \"extends\": \"@rfgamaral/eslint-config-typescript-unified/airbnb\"\n}\n```\n\n### Airbnb (React)\n\nExtends the Airbnb configuration with [React rules](https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb) from Airbnb:\n\n```json\n{\n  \"extends\": \"@rfgamaral/eslint-config-typescript-unified/airbnb-react\"\n}\n```\n\n### Airbnb (React + Hooks)\n\nExtends the Airbnb React configuration with [Hooks rules](https://github.com/airbnb/javascript/tree/master/packages/eslint-config-airbnb) from Airbnb:\n\n```json\n{\n  \"extends\": \"@rfgamaral/eslint-config-typescript-unified/airbnb-react-hooks\"\n}\n```\n\n### Recommended\n\nExtends the Airbnb configuration with my own [opinionated rules](https://github.com/rfgamaral/eslint-config-typescript-unified/blob/master/tests/recommended.test.js):\n\n```json\n{\n  \"extends\": \"@rfgamaral/eslint-config-typescript-unified/recommended\"\n}\n```\n\n### Recommended (React)\n\nExtends the Airbnb (React) configuration with my own [opinionated rules](https://github.com/rfgamaral/eslint-config-typescript-unified/blob/master/tests/recommended-react.test.js):\n\n```json\n{\n  \"extends\": \"@rfgamaral/eslint-config-typescript-unified/recommended-react\"\n}\n```\n\n### Recommended (React + Hooks)\n\nExtends the Airbnb (React + Hooks) configuration with my own [opinionated rules](https://github.com/rfgamaral/eslint-config-typescript-unified/blob/master/tests/recommended-react-hooks.test.js):\n\n```json\n{\n  \"extends\": \"@rfgamaral/eslint-config-typescript-unified/recommended-react-hooks\"\n}\n```\n\n### Semantics (type-checking)\n\nFor all the configurations mentioned above, the TypeScript rules are fast feedback rules which operate purely based on syntax (no type-checking). If you want some additional highly valuable rules that operate on semantics (type-checking), just suffix any of the configuration names above with `-semantics`. You can read a little bit more about it [here](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin#usage).\n\n## Frequently Asked Questions\n\n### Why is ESLint's `no-undef` rule disabled?\n\nThis rule is disabled to prevent ESLint from reporting `no-undef` false positives for Interfaces and Types. More details at [typescript-eslint/typescript-eslint#342](https://github.com/typescript-eslint/typescript-eslint/issues/342).\n\nThe TypeScript compiler will catch undeclared variables by default, so we don't need this rule.\n\n### Why are `*.d.ts` files being ignored for all Airbnb and Recommended configurations?\n\nAirbnb and Recommended configurations make use of [`eslint-plugin-import`](https://github.com/benmosher/eslint-plugin-import) which triggers `import/no-cycle` false positives for cyclic dependencies between `type` imports. More details at [benmosher/eslint-plugin-import#1453](https://github.com/benmosher/eslint-plugin-import/issues/1453).\n\n### How to configure a mixed JavaScript/TypeScript codebase with any of the Recommended configurations?\n\nRecommended configurations require explicit return types on functions and class methods ([explicit-function-return-type](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/explicit-function-return-type.md)) which triggers false positives for JavaScript files. To workaround that, please ensure add the following override to disable the rule for `.js` and `.jsx` files:\n\n```json\n{\n  \"overrides\": [\n    {\n      \"files\": [\"*.{js,jsx}\"],\n      \"rules\": {\n        \"@typescript-eslint/explicit-function-return-type\": \"off\"\n      }\n    }\n  ]\n}\n```\n\n## License\n\nThe use of this source code is governed by an MIT-style license that can be found in the [LICENSE](LICENSE) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frfgamaral%2Feslint-config-typescript-unified","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frfgamaral%2Feslint-config-typescript-unified","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frfgamaral%2Feslint-config-typescript-unified/lists"}