我不明白为什么在运行“next lint”脚本时,返回JSX的函数会使用规则"@typescript-eslint/no-empty-function"
进行lint。layout.tsx
文件第16行的代码如下:
export default function RootLayout({
children
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body className={inter.variable}>{children}</body>
</html>
);
}
正如您所看到的,该函数不是空的,并且它没有违反"@typescript-eslint/no-empty-function"
规则。但是,会出现以下错误消息:
Cannot read properties of undefined (reading 'getTokens')
Occurred while linting /Users/najaewan/Desktop/f-lab/clothesgpt/packages/clothes_gpt/app/layout.tsx:16
Rule: "@typescript-eslint/no-empty-function"
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
我还考虑了错误配置eslintrc.js
文件的可能性,但我无法找出原因。
const path = require('path');
module.exports = {
root: true,
parserOptions: {
project: ['./packages/*/tsconfig.json', 'typescript-eslint/parser'],
ecmaVersion: 2018,
sourceType: 'module'
},
extends: [
'next/core-web-vitals',
'plugin:@next/next/recommended',
'eslint:recommended',
'plugin:react/recommended',
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
'prettier',
'plugin:@typescript-eslint/recommended-requiring-type-checking'
],
plugins: ['@typescript-eslint', 'react', 'react-hooks', 'prettier', 'jest'],
parser: '@typescript-eslint/parser',
rules: {
'@typescript-eslint/no-floating-promises': 'error',
'@typescript-eslint/no-unused-vars': ['warn', { args: 'none' }],
'@typescript-eslint/no-empty-function': 0,
'@typescript-eslint/explicit-function-return-type': 0,
'@typescript-eslint/no-var-requires': 0,
'@typescript-eslint/interface-name-prefix': 0,
'@typescript-eslint/no-empty-interface': 'error',
'@typescript-eslint/no-use-before-define': 0,
'@typescript-eslint/no-non-null-assertion': 'error',
'@typescript-eslint/explicit-module-boundary-types': 0,
'@typescript-eslint/no-explicit-any': 0,
'import/no-unresolved': 'error',
'react/display-name': 0,
'react/self-closing-comp': 'error',
'react/react-in-jsx-scope': 'off',
'react/jsx-filename-extension': [
'error',
{ extensions: ['.js', '.jsx', '.ts', '.tsx'] }
],
'react/no-unescaped-entities': 0,
'react/prop-types': 0,
'no-undef': 0,
'no-constant-condition': 1,
'prettier/prettier': [
'error',
{
bracketSpacing: true,
printWidth: 80,
singleQuote: true,
trailingComma: 'none',
tabWidth: 2,
useTabs: false,
bracketSameLine: false,
semi: true
}
]
},
overrides: [
{
files: ['**/*.ts?(x)'],
parser: '@typescript-eslint/parser',
extends: [
'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/recommended-requiring-type-checking'
],
parserOptions: {
project: ['tsconfig.json', './packages/**/tsconfig.json'],
ecmaFeatures: {
jsx: true
},
ecmaVersion: 2018,
sourceType: 'module'
}
},
{
files: [
'packages/clothes_gpt/**/*.ts?(x)',
'packages/clothes_gpt/**/*.js?(x)'
],
rules: {
'@next/next/no-img-element': 'off'
},
settings: {
'import/parsers': {
'@typescript-eslint/parser': ['.ts', '.tsx']
},
'import/resolver': {
typescript: {
project: path.resolve(
`${__dirname}/packages/clothes_gpt/tsconfig.json`
)
}
}
}
}
],
settings: {
react: {
pragma: 'React',
version: 'detect'
}
},
env: {
browser: true,
es6: true,
jest: true
}
};
我不明白为什么"next lint"要用"@typescript-eslint/no-empty-function"
规则来lint返回JSX的函数。您可以在可用的存储库here中重现此错误
当在根目录/packages/clothes_gpt下运行"next lint"时,您应该会看到错误。
- 预期行为**:当运行"next lint"脚本时,返回JSX的函数不应该触发"@typescript-eslint/no-empty-function "规则。
- 当前行为**:返回JSX的函数触发“@typescript-eslint/no-empty-function”规则。
1条答案
按热度按时间aoyhnmkz1#
我发现了问题的原因并解决了它。
问题源于eslintrc.js文件中的特定部分,特别是在插件:@typescript-eslint/recommended extension plugin中。
typescript-eslint/recommended
在eslint plugin @typescript-eslint/recommended的第14行,设置了规则
'@typescript-eslint/no-empty-function': 'error'
。这条规则就是
@typescript-eslint/no-empty-function
连续掉毛的原因。为了克服这个问题,有几个变通方法。一种选择是完全避免使用@typescript-eslint/recommended
插件。或者,您可以通过添加@typescript-eslint/no-empty-function
规则并将其设置为"off"
来覆盖该规则。下面是一个示例配置片段,演示了覆盖:
关于
@typescript-eslint/no-empty-function
为什么返回JSX的问题,最好参考具体的规则文件来了解详细信息。您可以在no-empty-function source code中找到它