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

是否有ESLint规则可强制TypeScript/Angular代码仅使用纯函数?

TypeScript + Angular 项目约束纯函数的ESLint配置方案

可用校验规则

目前没有原生ESLint规则可以一键实现纯函数的全量约束,但可以通过组合eslint-plugin-functional插件和@typescript-eslint相关规则覆盖绝大多数场景:

  • functional是专门面向函数式编程的ESLint插件,核心校验规则如下:
    • functional/no-side-effects:核心规则,直接拦截函数内部的所有副作用操作,包括修改外部变量、调用带副作用的原生API(如console.log、DOM操作、网络请求等)
    • functional/prefer-immutable-types:强制函数入参、返回值使用不可变类型,避免函数内部修改入参
    • functional/no-let:禁止使用let声明变量,所有局部变量必须用const声明,规避局部可变状态
    • functional/no-this-expression:禁止使用this关键字,契合纯函数无上下文依赖的特性,也可以避免类方法隐式依赖实例状态的问题
    • functional/no-class:如果需要完全禁止类语法可以开启,Angular项目依赖组件/服务类的话可以按目录关闭该规则
  • 配合@typescript-eslint系列规则补充校验:
    • @typescript-eslint/explicit-function-return-type:强制声明函数返回值类型,方便静态校验相同入参下的输出一致性
    • @typescript-eslint/no-unsafe-return:禁止返回不确定类型的值,减少隐式副作用风险

Angular项目适配方案

Angular本身依赖组件、服务等类结构,不可避免会有非纯逻辑,建议做分层规则配置,不要全局开启所有约束:

推荐按文件功能目录/后缀划分规则覆盖范围,兼顾框架特性和纯函数约束要求

  • 针对*.util.ts、*.helper.ts等纯业务工具文件:开启全部functional插件的严格规则,强制所有导出函数为纯函数
  • 针对*.component.ts、*.service.ts等框架相关文件:仅开启functional/no-param-reassign规则禁止修改入参,不对生命周期钩子、依赖注入相关方法做纯函数强制要求,也可以自定义注释标记需要校验为纯函数的类方法,单独开启约束
  • 项目中不可避免的副作用逻辑(网络请求、本地存储操作、DOM修改等),建议单独放到*.effect.ts文件中,排除纯函数规则校验

具体配置步骤

  1. 安装所需依赖:
npm install eslint-plugin-functional @typescript-eslint/eslint-plugin @typescript-eslint/parser --save-dev
  1. 调整项目根目录的.eslintrc.json配置,参考如下:
{
  "parser": "@typescript-eslint/parser",
  "parserOptions": {
    "ecmaVersion": "latest",
    "sourceType": "module"
  },
  "plugins": ["@typescript-eslint", "functional"],
  "overrides": [
    // 工具文件纯函数严格校验
    {
      "files": ["**/*.{util,helper}.ts"],
      "rules": {
        "functional/no-side-effects": "error",
        "functional/prefer-immutable-types": ["error", {
          "returnType": "Immutable",
          "parameters": "Immutable"
        }],
        "functional/no-let": "error",
        "functional/no-this-expression": "error",
        "@typescript-eslint/explicit-function-return-type": "error"
      }
    },
    // 组件、服务文件宽松校验
    {
      "files": ["**/*.{component,service,pipe,module}.ts"],
      "rules": {
        "functional/no-param-reassign": "error"
      }
    }
  ]
}

注意事项

现有静态规则无法100%覆盖所有非纯场景,比如隐式修改闭包外部变量的极端情况,需要配合单测的入参输出一致性校验做补充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:54:05