@typescript-eslint/member-ordering配置无效,求排查方案
@typescript-eslint/member-ordering 配置无效排查思路
报错信息
Configuration for rule "@typescript-eslint/member-ordering" is invalid: Value ["signature","public-static-field","protected-static-field","private-static-field","public-decorated-field","protected-decorated-field","private-decorated-field","public-instance-field","protected-instance-field","private-instance-field","public-abstract-field","protected-abstract-field","private-abstract-field","public-constructor","protected-constructor","private-constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method"] should be string. Value ["signature","public-static-field","protected-static-field","private-static-field","public-decorated-field","protected-decorated-field","private-decorated-field","public-instance-field","protected-instance-field","private-instance-field","public-abstract-field","protected-abstract-field","private-abstract-field","public-constructor","protected-constructor","private-constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method"] should be equal to one of the allowed values. Value "private-abstract-field" should be equal to one of the allowed values. Value "private-abstract-field" should be array. Value "private-abstract-field" should match exactly one schema in oneOf. Value ["signature","public-static-field","protected-static-field","private-static-field","public-decorated-field","protected-decorated-field","private-decorated-field","public-instance-field","protected-instance-field","private-instance-field","public-abstract-field","protected-abstract-field","private-abstract-field","public-constructor","protected-constructor","private-constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method"] should be object. Value ["signature","public-static-field","protected-static-field","private-static-field","public-decorated-field","protected-decorated-field","private-decorated-field","public-instance-field","protected-instance-field","private-instance-field","public-abstract-field","protected-abstract-field","private-abstract-field","public-constructor","protected-constructor","private-constructor","public-static-method","protected-static-method","private-static-method","public-decorated-method","protected-decorated-method","private-decorated-method","public-instance-method","protected-instance-method","private-instance-method","public-abstract-method","protected-abstract-method","private-abstract-method"] should match exactly one schema in oneOf.
当前配置
"@typescript-eslint/member-ordering": [ "error", { "default": [ "signature", "public-static-field", "protected-static-field", "private-static-field", "public-decorated-field", "protected-decorated-field", "private-decorated-field", "public-instance-field", "protected-instance-field", "private-instance-field", "public-abstract-field", "protected-abstract-field", "private-abstract-field", "public-constructor", "protected-constructor", "private-constructor", "public-static-method", "protected-static-method", "private-static-method", "public-decorated-method", "protected-decorated-method", "private-decorated-method", "public-instance-method", "protected-instance-method", "private-instance-method", "public-abstract-method", "protected-abstract-method", "private-abstract-method" ] } ],
排查与解决方案
1. 移除非法成员类型
报错核心指向private-abstract-field和private-abstract-method不被允许,原因是TypeScript本身不支持私有抽象成员(私有成员无法被子类访问实现,不符合抽象成员的设计初衷),因此@typescript-eslint/member-ordering规则也未提供这两个配置项。直接从数组中删除这两个值即可修复配置合法性问题。
修正后的配置示例:
"@typescript-eslint/member-ordering": [ "error", { "default": [ "signature", "public-static-field", "protected-static-field", "private-static-field", "public-decorated-field", "protected-decorated-field", "private-decorated-field", "public-instance-field", "protected-instance-field", "private-instance-field", "public-abstract-field", "protected-abstract-field", "public-constructor", "protected-constructor", "private-constructor", "public-static-method", "protected-static-method", "private-static-method", "public-decorated-method", "protected-decorated-method", "private-decorated-method", "public-instance-method", "protected-instance-method", "private-instance-method", "public-abstract-method", "protected-abstract-method" ] } ]
2. 校验依赖版本一致性
确认@typescript-eslint/eslint-plugin、@typescript-eslint/parser与eslint版本兼容。v5.51.0的插件/parser要求ESLint版本在^6.0.0 || ^7.0.0 || ^8.0.0范围内,若ESLint版本过低或过高,可能导致规则解析异常。可查看锁文件(package-lock.json/yarn.lock)确认实际安装版本,必要时重新安装依赖:
rm -rf node_modules package-lock.json npm install
3. 清除ESLint缓存
ESLint可能缓存旧的规则定义,运行lint时添加--no-cache参数强制重新解析配置:
eslint . --no-cache
4. 简化配置测试
若问题仍存在,先将配置简化为最小有效版本(如仅保留["public-static-field", "public-constructor"]),确认配置可正常运行后,再逐步添加原有成员项,定位是否存在其他非法配置值。
内容的提问来源于stack exchange,提问作者jkyoutsey
相关产品推荐
相关产品推荐

