DEBUG.WIKI
京东云;让 AI 进入真实业务;零售 · 物流 · 客服 · 硬件;查看方案 →
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国
Evoxt;最高 6.0GHz CPU;高频云服务器 · 免费每周备份;查看配置 →

getter-return 报普通 get 方法缺少返回值,先核对描述符参数位置

getter-return 曾把描述符 API 的目标或原型参数中的普通 get 误当 getter。修复会校验参数位置及全局调用,真实空 getter 仍应接受规则检查。

ESLint 报 Expected to return a value in method 'get',先分清这里的 get 是属性描述符 getter,还是一个普通方法。给普通方法补 return undefined 可能消掉提示,却没有修正规则对代码身份的误判。

一种具体误报出现在描述符 API 的另一个参数中:

Object.defineProperty(
  { get(key) {} },
  'name',
  { value: 1 },
);
Object.create(
  { foo: { get(key) {} } },
  { bar: { value: 1 } },
);

第一个 get 在目标对象内,第二个在传入的原型对象内。它们都不是实际描述符里的 get。真正的描述符分别是第三个与第二个参数,不能仅看到某个祖先调用名字是 Object.defineProperty 或 Object.create 就把里面所有同名方法当作 getter。

具体报告使用 ESLint Playground 与默认 Espree,未披露精确 ESLint 安装版本。正式修复在 ESLint 10.8.1 的对应发行中列出;10.12.0 代码会校验实际描述符参数位置及全局方法调用身份。可以在项目分支采用这个版本:

npm install -D eslint@10.12.0
npm ls eslint
npx eslint example.js

运行前核对 Node 与插件支持范围,保留原 getter-return 配置。不要直接关闭整条规则:真实 getter 缺少返回值仍应得到提示,例如:

Object.defineProperty({}, 'name', {
  get() {
    // 这才是真实描述符 getter,没有返回值
  },
});

验收需同时保留普通 get 方法与这个真实 getter。前者不应再因为位于错误参数内部而误报,后者仍应按照当前 rule 选项报错。Object.create 的原型参数与属性描述符参数也应分别对照,避免只测 defineProperty 一个 API。

如果项目确实允许 getter 不返回值,应按业务约定评估规则配置,例如允许显式返回 undefined 的选项;这与把普通 get 误认成 getter 是不同问题。不要借修复误报把真实描述符里的空 getter 一起忽略。

对应修复还要求所调用的是全局 Object 的这些方法。业务参数遮蔽 Object 时,不应套用内建描述符契约;但检查代码时应分别确认参数位置与调用身份,不能把任何同名方法的异常都解释成遮蔽。

升级后仍有提示,可查看 npx eslint --print-config example.js,确认实际规则、parser 与文件类型,再核对具体 get 所在的参数层级。对于完全不在这些 API 调用内的普通 get 误报,应另查规则版本与代码结构,不能仅根据相同错误文本套用本题。这里解决的是描述符调用内的参数位置与身份校验,不承诺所有名称为 get 的方法提示都由这一条缺陷造成。