VSCode 中的 eslintrc 类型安全使用 jsdoc 注释导入打字稿声明

问题描述 投票:0回答:1

如何让 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

javascript typescript visual-studio-code eslint jsdoc
1个回答
0
投票

.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}
© www.soinside.com 2019 - 2024. All rights reserved.