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

查找可强制消费函数返回值的TypeScript或ESlint规则

强制消费函数返回值的规则实现方案

可用规则及配置

你可以通过@typescript-eslint系列ESLint规则配合针对性配置,实现你要的校验效果:

  1. 基础校验规则:@typescript-eslint/no-unused-expressions
    该规则会直接拦截无消费的独立函数调用语句,仅允许将返回值赋值给变量、作为其他函数参数、参与表达式运算的调用写法。ESLint配置示例如下:
{
  "plugins": ["@typescript-eslint"],
  "rules": {
    "@typescript-eslint/no-unused-expressions": ["error", {
      // 禁止短路表达式作为独立语句,避免绕过校验
      "allowShortCircuit": false,
      // 禁止三元表达式作为独立语句
      "allowTernary": false,
      // 禁止标签模板作为独立语句
      "allowTaggedTemplates": false
    }]
  }
}
  1. neverthrow/ts-results场景强化
    如果仅需要对返回Result类型的函数做强制消费校验,可以使用eslint-plugin-neverthrow插件,配置后仅会拦截返回Result类型的无消费调用,不会影响普通无返回值函数的调用。
    如果你需要手动标记某类函数必须消费返回值,也可以给返回值加专属标记类型:
// 定义带标记的Result类型
type MandatoryResult<T, E> = {
  __mandatory: true
} & Result<T, E>

// 函数返回该类型时,调用必须消费返回值
const updateUser: (id: number) => MandatoryResult<void, Error> = (id) => {
  // 实现逻辑
}

校验效果匹配

  • 可通过校验的写法:
// 赋值存储返回值
const a = getNum()
// 返回值作为参数传入其他函数
console.log(getNum())
// 主动标注忽略返回值(明确豁免)
void getNum()
// Result类型正常处理
const res = updateUser(1)
if (res.isErr()) {
  // 错误处理逻辑
}
  • 会被拦截的写法:
// 直接调用无任何返回值消费
getNum()
// 返回Result类型的函数直接调用无处理
updateUser(1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 20:24:07