javascript Cannot read properties of undefined(阅读'getTokens')Occurred while linting /app/layout.tsx:16规则:“@typescript-eslint/no-empty-function”

ivqmmu1c  于 2023-06-20  发布在  Java
关注(0)|答案(1)|浏览(463)

我不明白为什么在运行“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”规则。
aoyhnmkz

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"来覆盖该规则。
下面是一个示例配置片段,演示了覆盖:

"extends": [
      "plugin:@typescript-eslint/recommended",
      "plugin:@typescript-eslint/recommended-requiring-type-checking"
    ],
    "rules":{
      "@typescript-eslint/no-empty-function": "off"
    }

关于@typescript-eslint/no-empty-function为什么返回JSX的问题,最好参考具体的规则文件来了解详细信息。您可以在no-empty-function source code中找到它

相关问题