javascript - Kuinka saada eslint typescript tunnistamaan rajapinnat .d.ts-tiedostoissa?


Minulla on vite 3 + vuetify 3 + vue 3 -projekti volar-laajennuksella. Minulla on rajapintoja määriteltynä joissakin .d.ts-tiedostoissa ja olen asentanut myös eslintin, mutta se valittaa, ettei rajapintoja löydy. Jos poistan käytöstä no undefined -säännön tällä tavalla

"overrides": [
      {
        "files": ["*.vue"],
        "rules": {
          "no-undef": "off"
        }
      }
    ]

sitten se toimii, eikä TypeScriptillä eikä Volarilla ole ongelmia. Joten se tarkoittaisi, että ESLint ei pysty tunnistamaan sitä.

Paketin riippuvuudet näyttävät tältä:

  "dependencies": {
    "@azure/msal-browser": "^2.30.0",
    "@mdi/font": "^7.0.96",
    "@typescript-eslint/eslint-plugin": "^5.40.1",
    "eslint-plugin-vue": "^9.6.0",
    "pinia": "^2.0.23",
    "vue": "^3.2.41",
    "vue-i18n": "^9.2.2",
    "vue-router": "^4.1.5",
    "vuetify": "npm:@vuetify/nightly@next",
    "date-fns": "^2.29.3"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^3.1.2",
    "eslint": "^8.25.0",
    "sass": "^1.55.0",
    "typescript": "^4.8.4",
    "vite": "^3.1.8",
    "vite-plugin-eslint": "^1.8.1",
    "vite-plugin-vuetify": "^1.0.0",
    "vue-cli-plugin-vuetify": "~2.5.8",
    "vue-tsc": "^1.0.8"
  }

ja minun eslint-konfiguraationi näyttää tältä

{
    "env": {
        "browser": true,
        "es2021": true,
        "node": true
    },
    "extends": [
        "eslint:recommended",
        "plugin:@typescript-eslint/eslint-recommended",
        "plugin:@typescript-eslint/recommended",
        "plugin:vue/essential"
    ],
    "parserOptions": {
        "ecmaVersion": "latest",
        "parser": "@typescript-eslint/parser",
        "sourceType": "module"
    },
    "plugins": [
        "vue",
        "@typescript-eslint"
    ],
    "rules": {
        "@typescript-eslint/no-explicit-any": "error",
        "@typescript-eslint/no-inferrable-types": "error",
        "semi": "error"
    },
    "ignorePatterns": ["dist/**/*.js"],
    "root": true
}

Saamani eslint-virhe on tämä

interface EDB_Matter
'EDB_Matter' is not defined. eslint(no-undef)

Kuinka voin saada eslintin tunnistamaan rajapinnan .d.ts-tiedostosta?

Kiitos

Vastaus #1

Suosittelemme voimakkaasti, ettet käytä no-undef-lint-sääntöä TypeScript-projekteissa. Sen tarjoamat tarkistukset ovat jo valmiina TypeScriptissä ilman konfiguraatiota - TypeScript tekee tämän vain huomattavasti paremmin.

https://typescript-eslint.io/linting/troubleshooting#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors

TypeScriptiä käytettäessä on suositeltavaa poistaa no-undef-sääntö käytöstä suoraan, koska TypeScript tarkistaa ne jo, eikä sinun tarvitse huolehtia tästä.

Jos todella tarvitset tämän säännön käyttöönoton, lisää nämä rajapinnat eslint-konfiguraatioon:

// .eslintrc.cjs
module.exports = {
  globals: {
    EDB_Matter: true,
    /* ... */
  },
}