ESLint 限制使用 React.StatelessComponent 和 React.FunctionalComponent

jon*_*ode 2 typescript reactjs eslint eslintrc typescript-eslint

是否有规则可以禁用React.StatelessComponentReact.FunctionalComponent仅使用React.FC

例如:

export const ComponentOne: React.StatelessComponent<Props> = (props) => { return <....> };
export const ComponentTwo: React.FunctionalComponent<Props> = (props) => { return <....> };
Run Code Online (Sandbox Code Playgroud)

应由 ESLint 强制编写为

export const ComponentOne: React.FC<Props> = (props) => { return <....> };
export const ComponentTwo: React.FC<Props> = (props) => { return <....> };
Run Code Online (Sandbox Code Playgroud)

我认为通过规则是可能的no-restricted-syntax,但无法从文档中弄清楚。

jon*_*ode 5

好的终于能够弄清楚了,可以使用规则来实现这一点@typescript-eslint/ban-types

"@typescript-eslint/ban-types": ["error",
{
    "types": {
        "React.StatelessComponent": { "message": "Please use React.FC instead.", "fixWith": "React.FC" },
        "React.FunctionalComponent": { "message": "Please use React.FC instead.", "fixWith": "React.FC" },
     }
   }
]
Run Code Online (Sandbox Code Playgroud)

  • 出于好奇,为什么要强制执行“React.FC”?似乎建议我们根本不应该使用它 - https://github.com/typescript-cheatsheets/react#function-components,https://github.com/facebook/create-react-app/pull /8177,https://kentcdodds.com/blog/how-to-write-a-react-component-in-typescript (3认同)