-
- Notifications
You must be signed in to change notification settings - Fork 2.7k
Open
Labels
Description
Is there an existing issue for this?
- I have searched the existing issues and my issue is unique
- My issue appears in the command-line and not only in the text editor
Description Overview
Adding react/prefer-read-only-props rule does not trigger when using React.FC or React.FunctionComponent without importing React.
In modern React, we don't need to import React thanks to the new JSX Transform:
And TypeScript supports this out of the box:
So even for React types we don't have to import them. React.FC just works in .tsx files.
But react/prefer-read-only-props fails to identify the component as a React component if we use React.FC or React.FunctionComponent without importing React.
Expected Behavior
This code does NOT error
interface ChipProps { chipColor: string; label: string; } const Chip: React.FC<ChipProps> = ({ chipColor, label }) => { return <div style={{ backgroundColor: chipColor }}>{label}</div>; };
This code does
// This line is added import React from 'react' interface ChipProps { chipColor: string; label: string; } const Chip: React.FC<ChipProps> = ({ chipColor, label }) => { return <div style={{ backgroundColor: chipColor }}>{label}</div>; };
.eslintrc.js
module.exports = { root: true, env: { browser: true, es6: true, es2021: true, }, plugins: ['@typescript-eslint', 'react'], parser: '@typescript-eslint/parser', parserOptions: { ecmaFeatures: { jsx: true, }, ecmaVersion: 2021, sourceType: 'module', }, settings: { react: { version: 'detect', }, }, rules: { 'react/prefer-read-only-props': 'warn', }, };tsconfig.json
{ "compilerOptions": { "allowJs": true, "allowSyntheticDefaultImports": true, "baseUrl": "./", "composite": false, "declaration": false, "declarationMap": false, "esModuleInterop": true, "forceConsistentCasingInFileNames": true, "isolatedModules": true, "jsx": "react-jsx", "lib": ["DOM", "DOM.Iterable", "ESNext"], "module": "ESNext", "moduleResolution": "node", "noEmit": true, "resolveJsonModule": true, "skipLibCheck": true, "strict": true, "target": "ES2021", "types": ["node", "@testing-library/jest-dom"], }, "include": ["*.ts", "src/**/*.ts", "src/**/*.tsx", "src/**/*.json"], "exclude": ["node_modules", "build", "storybook-static"] } Tried in VS Code and in the command line:
yarn eslint --max-warnings 0 src/components/Chip.tsxeslint-plugin-react version
7.33.2
eslint version
8.38.0
node version
v16.14.0
alexilyaev, LevKMitiga and Mnigos