如何让 VSCode 检查
.eslintrc.js
的语法并进行自动补全?我能够对 js 配置文件使用以下结构,该文件遵循我自己的应用程序定义的自定义语法,但是当我尝试将相同的技巧应用于从“eslint”导入的 Linter.BaseConfig
时,它不会执行任何操作。
/** @typedef {import("eslint").Linter.BaseConfig} BaseConfig */
/** @param {BaseConfig} c */ // ne fonctionne pas
function castBaseConfig(c) {return c}
module.exports = castBaseConfig({
env: {browser: false, es2019: true, node: true},
ignorePatterns: ["dist", "jsdoc", "out", "out2", "public"],
extends: "eslint:recommended",
parserOptions: {ecmaVersion: "latest"},
// etc
}
请注意,
node_modules/@types/eslint/index.d.ts
包含export namespace Linter {interface BaseConfig {...}}
以及env、parserOptions、插件、规则(通过HasRules
)等的字段定义......所以它看起来应该可以工作。这不是关于node_modules或index.d.ts的文件查找问题,因为type BaseConfig
的工具提示说它扩展到Linter.BaseConfig<Linter.RulesRecord, Linter.RulesRecord>
,但似乎没有发生类型检查,并且没有特定于类型的完成工作。
对于我使用该技巧的其他文件,使用
/** @typedef {import("../lib/config").MultiConfig} MultiConfig */
导入的类型定义被正确应用:例如如果 port
是字符串而不是数字,或者缺少必需的属性,或者存在未知属性,它会抱怨,并且 Ctrl+空格 为适当的上下文提供剩余的未指定属性。
这可能与定义的差异有关吗?例如。
interface
vs type
。
.eslintrc.js
和我已经检查过的其他js文件之间的另一个区别是后者列在tsconfig.json
中。将 .eslintrc.js
添加到 tsconfig.json
会导致进行检查。
但是,由于
node_modules/@types/eslint/index.d.ts
不完整,ignorePatterns
导致了错误(“对象文字只能指定已知属性”)。所以我必须以这种方式扩展 BaseConfig :
/** @param {BaseConfig & {ignorePatterns:string[]}} c */
function enforceBaseConfig(c) {return c}