Eslint说Typescript应用程序中的所有枚举都“已经在上作用域中声明”

kupeojn6  于 2023-02-13  发布在  TypeScript
关注(0)|答案(6)|浏览(339)

启动一个新的应用程序,我安装了eslint,并使用以下配置进行配置,但每次我创建一个enum时,它都说它已经被定义了。甚至是无意义的字符串。其他变量类型(const,var,let)没有这个问题。我可以禁用这个规则,但我希望它适用于它实际上是真的情况。

{
  "root": true,
  "parser": "@typescript-eslint/parser",
  "plugins": ["@typescript-eslint"],
  "parserOptions": {
    "project": ["./tsconfig.json"],
    "ecmaFeatures": {
      "ecmaVersion": 6,
      "jsx": true
    }
  },
  "overrides": [],
  "extends": [
    "airbnb-typescript",
    "prettier",
    "prettier/@typescript-eslint",
    "plugin:@typescript-eslint/recommended-requiring-type-checking"
  ],
  "rules": {
    "spaced-comment": 0,
    "import/prefer-default-export": 0,
    "@typescript-eslint/no-use-before-define": 0,
    "@typescript-eslint/restrict-template-expressions": [
      1,
      { "allowBoolean": true }
    ],
    "react/jsx-props-no-spreading": "off",
    "react/state-in-constructor": 0,
    "react/require-default-props": 0,
    "react/destructuring-assignment": [
      1,
      "always",
      {
        "ignoreClassFields": true
      }
    ]
  }
}

dl5txlt9

dl5txlt91#

如果您是TSLint-to-ESLint的用户,则该脚本为a bug that has since been fixed,因此使用较新版本重新运行该脚本也可修复此问题,或者只需禁用no-shadow并启用@typescript-eslint/no-shadow
如果你正在使用一些公共配置,滥用规则,然后一定要让他们知道,人数仍然运行到这是有点惊人的。
请参阅@typescript-eslint/no-shadow如何使用此常见问题解答部分

如何使用

module.exports = {
  "rules": {
    // Note: you must disable the base rule as it can report incorrect errors
    "no-shadow": "off",
    "@typescript-eslint/no-shadow": "warn"
  }
};

搜索typescript-eslint GitHub issues显示许多人在问同样的问题。

kqlmhetl

kqlmhetl2#

Tadhg McDonald-Jensen的回答很有用,但有一点需要说明,直接将以下配置项写入.eslintrc将报告错误:

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

下面是一个关于无阴影规则的正确示例:

{
  "rules": {
      "no-shadow": "off",
      "@typescript-eslint/no-shadow": ["error"]
  },
}
pkln4tw6

pkln4tw63#

我在TypeScript中的以下代码中遇到了类似的问题:

export enum MyEnum {
  myValueOne = 'myValue',
  myValueTwo = 'myValueTwo', // <-- got "already declared in the upper scope” error
}

export class myValueTwo {
   constructor(){}
}

遗憾的是,rulesoverrides均未解决问题

{
   "rules": {
      "no-shadow": "off",
      "@typescript-eslint/no-shadow": ["error"]
   },
   "overrides": {
      "no-shadow": "off",
      "@typescript-eslint/no-shadow": ["error"]
   },
}

在花了几个小时检查不同的问题,疑问和文档的问题,我遇到了官方文档的@typescript-eslint/no-shadow . Here is the link
我所要做的是在eslint中为@typescript-eslint/no-shadow添加额外的ignoreTypeValueShadow选项。
无阴影的最终设置如下所示:

{
  "overrides": {
    "no-shadow": "off",
    "@typescript-eslint/no-shadow": ["error", , { "ignoreTypeValueShadow": true }]
  },
}
wfauudbj

wfauudbj4#

当我用对象的某个名称声明变量时,我会发生这个错误。我忘记了将变量名用小写而不是对象名的大写。类型文件

**解决方案:**要修复此问题,只需将变量名设置为小写。

生成此Eslint错误的代码示例:

这是我的枚举:类型文件模型.ts

public enum TypeFichier {
XML, PDF, IMAGE, ZIP
}

这是我的对象模型app-file-model.ts

import {TypeFile} from 'app/shared/model/enum/type-file.model';

export interface IAppFile {
  ...
  TypeFile?: TypeFile;
}

export class AppFile implements IAppFile{
  constructor(
    ...
    public TypeFile?: TypeFile
  ) {}
}
fzwojiic

fzwojiic5#

似乎将其添加到基础“规则”中还不够,我不得不在覆盖下再次添加它

# eslintrc.js
{
  "rules": { // Did not work here as intended
    "@typescript-eslint/dot-notation": "error",
    "no-shadow": "off",
  },
  "overrides": [
    {
      "files": [
          "*.ts"
      ],
      ...
      "rules": { // Here it worked
          "@typescript-eslint/dot-notation": "error",
          "no-shadow": "off",
      }
  ]
}
ozxc1zmp

ozxc1zmp6#

我使用以下配置设法阻止了错误的出现:

{
   "rules": {
      "no-shadow": "off",
      "@typescript-eslint/no-shadow": ["off"]
   }
}

在这两种情况下都使用“off”,因为我注意到在我读过的所有例子中都有一个反复出现的模式,即在第一个例子中使用“off”,在第二个例子中使用“error”。这让我怀疑这是不是正确的方法,但我一直无法用其他方法避免这些错误,甚至无法使用覆盖。

相关问题