'React' was used before it was defined 'React' was used before it was defined typescript typescript

'React' was used before it was defined


From the official documentation.

"rules": {  // note you must disable the base rule as it can report incorrect errors  "no-use-before-define": "off",  "@typescript-eslint/no-use-before-define": ["error"]}


The bug occurs due to mismatch of @typescript-eslint versions in react-scripts and your local package.json - GitHub issue

You can downgrade the packages until react-scripts updates their version.

    "@typescript-eslint/eslint-plugin": "4.0.1",    "@typescript-eslint/parser": "4.0.1",

EDIT 2020-09-14

It seems the bug is not related to react-scripts version of @typescript-eslint since multiple people reported the same bug without using react-scripts.

Anyway, the workaround remains the same - downgrade to the working version of @typescript-eslint until the fix is available.

EDIT 2020-10-24

react-scripts@4.0.0 has been published with updated @typescript-eslint. Using the newest version should solve the issue.

EDIT 2020-11-04

If after upgrading the packages the error is still there, most probably your eslint config uses the wrong rule. Check out Igor's answer to fix it.


If you are only getting this error for .js files, make sure @typescript-eslint/parser is being used exclusively on Typescript files.

.eslintrc.json (abbreviated)

{  "overrides": [    {      "files": ["**/*.ts", "**/*.tsx"],      "plugins": ["@typescript-eslint"],      "rules": {        "no-use-before-define": "off",        "@typescript-eslint/no-use-before-define": ["error"],      },    }  ],  // WRONG: Do not use @typescript-eslint/parser on JS files  // "parser": "@typescript-eslint/parser",  "plugins": [    "react",    // "@typescript-eslint"  ],}