You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript项目全局scope下interface等的ESLint AST选择器咨询

配置eslint-plugin-jsdoc要求全局作用域元素添加JSDoc注释

全局作用域目标元素的AST选择器

要限定全局作用域,核心是筛选父节点为ESLint AST根节点Program的元素,用:has-parent(Program)语法实现。对应你需要的元素,选择器如下:

  • 全局interface:TSInterfaceDeclaration:has-parent(Program)
  • 全局类型别名type:TSTypeAliasDeclaration:has-parent(Program)
  • 全局const/let/var变量:VariableDeclaration:has-parent(Program)(该节点包含三种变量类型,无需拆分;若要单独指定某类,可加属性筛选,比如VariableDeclaration[kind="const"]:has-parent(Program))
  • 全局函数声明:FunctionDeclaration:has-parent(Program)
  • 全局类声明:ClassDeclaration:has-parent(Program)

如果需要覆盖全局的函数表达式(比如const globalFn = () => {}这类),可以添加:
VariableDeclarator:has-parent(VariableDeclaration):has-parent(Program) > ArrowFunctionExpression, FunctionExpression

完整ESLint配置示例

把这些选择器配置到settings.jsdoc.contexts,同时确保启用jsdoc/require-jsdoc规则:

module.exports = {
  // 其他ESLint基础配置
  parser: '@typescript-eslint/parser',
  plugins: ['@typescript-eslint', 'jsdoc'],
  settings: {
    jsdoc: {
      contexts: [
        'TSInterfaceDeclaration:has-parent(Program)',
        'TSTypeAliasDeclaration:has-parent(Program)',
        'VariableDeclaration:has-parent(Program)',
        'FunctionDeclaration:has-parent(Program)',
        'ClassDeclaration:has-parent(Program)',
        // 可选:添加全局函数表达式的规则
        // 'VariableDeclarator:has-parent(VariableDeclaration):has-parent(Program) > ArrowFunctionExpression, FunctionExpression'
      ]
    }
  },
  rules: {
    'jsdoc/require-jsdoc': ['error', {
      contexts: require('./.eslintrc.js').settings.jsdoc.contexts
    }]
  }
};

注意事项

  • 确认你的ESLint版本支持:has-parent()选择器(ESLint v6+已支持)。
  • 如果某些元素不需要强制注释,可以从contexts数组中移除对应的选择器。
  • 对于export导出的全局元素(比如export interface MyInterface {}),上述选择器依然有效,因为它们的父节点还是Program。

内容的提问来源于stack exchange,提问作者PatrykB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 17:06:26