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
相关产品推荐
相关产品推荐

