前端状态管理【免费下载链接】platformReactive State for Angular项目地址https://gitcode.com/gh_mirrors/pl/platform点击查看免费下载导读prefer-action-creator是 NgRx ESLint 插件中针对store模块提供的一条代码风格suggestion规则核心主张是使用createAction生成的 Action Creator优于手写的Action类。本文将以仓库中的官方规则文档为主体结合规则源码prefer-action-creator.ts、配套测试prefer-action-creator.spec.ts以及内置配置store.ts深入讲解该规则的作用范围、触发条件、违规/合规示例与启用方式帮助你理解并落实 NgRx 推荐的 Action 书写范式。规则概览该规则的元数据定义在源码的meta字段中与官方文档页首的生成内容一一对应属性值说明Typesuggestion属于代码风格建议类规则不代表程序运行错误FixableNo不可自动修复需要开发者手动改写代码SuggestionNo不提供编辑器内的自动修复建议suggestion fixRequires type checkingNo基于纯语法分析即可工作无需类型信息运行开销低ConfigurableNo不接受任何配置选项schema为空数组ngrxModulestore归入 NgRx 的 store 模块规则集上述信息在源码 prefer-action-creator.ts 中有直接体现type: suggestion、schema: []、docs.ngrxModule: store。由于不依赖类型检查requiresTypeChecking为false它可以在常规非 type-checkedESLint 配置中直接运行。Rule Details规则判定逻辑规则的命名与报告信息非常直白规则名prefer-action-creator对应 ESLint 配置键ngrx/prefer-action-creator报告消息messageId 为preferActionCreatorUsingAction classis forbidden. Useaction creatorinstead.违规incorrect代码示例当类声明同时满足以下两个特征时即触发本规则类实现了Action接口写法可以是implements Action也可以是带命名空间的implements ngrx.Action类内部定义了名为type的属性无论是否加readonly也无论type的值是字符串字面量还是来自常量的引用。// 违规实现 Action 接口且带有 type 属性 class Test implements Action { type [Customer Page] Load Customer; } class Test implements ngrx.Action { readonly type ActionTypes.success; constructor(readonly payload: Payload) {} }合规correct代码示例以下三种写法都不会触发规则// 合规使用 createAction 创建 Action Creator export const loadUser createAction([User Page] Load User); // 合规类虽然定义了 type 属性但没有实现 Action 接口 class Test { type [Customer Page] Load Customer; } // 合规类实现了 Action 接口但属性名是 member 而非 type class Test implements Action { member [Customer Page] Load Customer; }源码层的触发条件规则的实现非常精炼完整逻辑只有一行基于 AST 的选择器表达式见 prefer-action-creator.tsClassDeclaration:has( TSClassImplements:matches( [expression.nameAction], [expression.property.nameAction] ) ):has(PropertyDefinition[key.nametype])拆解这段选择器可以精确还原规则的判定范围ClassDeclaration仅针对类声明TSClassImplements要求类实现了某个接口[expression.nameAction]与[expression.property.nameAction]分别匹配implements Action与implements ngrx.Action两种书写形式其中后者的接口名位于命名空间的property位置:has(PropertyDefinition[key.nametype])类体内必须包含名为type的类属性。一旦命中规则直接在类声明节点上报告错误。从选择器可推断判定是纯结构性的不关心type的值来源字面量或常量引用、不关心是否readonly也不进行类型检查。规则背后的设计动机为何优先使用 Action Creator该规则倡导的Action Creator源自createAction工厂函数定义于 modules/store/src/action_creator.ts。createAction接受描述动作的字符串type返回一个可调用的 Creator 函数调用后即产生符合Action接口的对象。使用 Action Creator 相比 Action 类的主要优势在 action_creator.ts 的usageNotes中均有对应用法演示样板代码更少无需手写class、constructor、字段初始化一行createAction即可声明动作类型更安全配合propsT()或emptyProps()可将载荷payload的类型直接编码进 Creatordispatch 时自动获得完整的类型推断统一的消费方式Creator 可直接传入store.dispatch、reducer 的on(...)以及 effect 的ofType(...)中与 NgRx 其余 API 无缝衔接避免了类式 Action 在 reducer/effect 中反复做类型断言的麻烦可扩展元数据createAction还支持传入自定义 Creator 函数以附加额外元数据见 action_creator.ts 的重载签名。官方文档与源码注释见 action_creator.ts均明确指出Action Creator 就是为降低类式 Action 的显式性explicitness而设计的更优形态。如何启用该规则通过内置配置一键启用prefer-action-creator已被纳入插件的两套内置配置默认以error级别开启store 配置configs/store.ts启用所有 store 模块相关规则all 配置configs/all.ts启用插件全部规则。即安装插件后直接在 ESLint 的 flat config 中引入ngrx/store或ngrx/all配置即可生效无需额外配置该规则。单独配置该规则不可配置Configurable: No因此没有参数可调只能控制开关与严重级别。需要单独启用时可在 ESLint 配置中声明export default [ // ... 其他配置 { name: ngrx/prefer-action-creator, rules: { ngrx/prefer-action-creator: error, // 也可设为 warn以告警而非报错的形式提示 }, }, ];测试用例佐证规则仓库内置的测试文件 prefer-action-creator.spec.ts 使用typescript-eslint/rule-tester驱动其中**有效用例valid**共 4 条createAction调用、无Action接口的普通类、实现了Action但属性名为member的类、仅构造器带参数而type为readonly常量引用但不实现Action接口的类**无效用例invalid**共 2 条implements Action与implements ngrx.Action两种写法均通过fromFixture标记出完整的违规区间并断言报告的消息 ID 为preferActionCreator。这些用例与官方文档中的违规/合规示例完全一致构成了规则行为的可执行证据只要实现Action接口 存在type属性同时成立无论type是字符串字面量还是常量引用、是否带readonly都会被报告。与相邻规则的协同prefer-action-creator并非孤立存在它与其他两条规则共同构成了 NgRx 对 Action 书写方式的完整约束三者在 configs/store.ts 中相邻出现prefer-action-creator-in-dispatchprefer-action-creator-in-dispatch.ts进一步约束store.dispatch(...)的调用处禁止直接传入new出的旧式 Action 对象或普通对象字面量必须使用 Action Creatorprefer-action-creator-in-of-typeeffects 模块见 configs/effects.ts约束 effect 中ofType(...)的用法同样要求传入 Action Creator。三者合起来意味着从声明本条规则到dispatch 调用再到effect 的 ofType 监听NgRx 推荐在 Action 的整个生命周期内都使用createAction创建的函数形式彻底淘汰类式 Action 的写法。这也与createAction设计为可同时作为类型描述与值使用的特性见 action_creator.ts 中 reducer 的on与 effect 的ofType用法相吻合。小结prefer-action-creator是一条实现极简、语义明确、开箱即用的代码风格规则凡是实现了Action接口且定义了type属性的类都会被标记并提示改用createAction。它不需要类型检查、不支持自动修复、也不接受配置配合ngrx/store内置配置即可立刻生效。对于正在推行 NgRx 推荐 Action 写法的团队将它与prefer-action-creator-in-dispatch、prefer-action-creator-in-of-type搭配使用可以在声明、dispatch、effect 三个层面全面统一为 Action Creator 范式。赞分享前端状态管理【免费下载链接】platformReactive State for Angular项目地址https://gitcode.com/gh_mirrors/pl/platform点击查看免费下载相关推荐ESLint prefer-spread 规则详解用展开运算符替代 Function.prototype.apply()ESLint prefer spread 规则详解用展开运算符替代 Function.prototype.apply 导读 prefer spread 是 E开发工具Lint静态分析代码质量eslint-plugin-unicorn 规则详解prefer-dom-node-text-content —— 用 .textContent 替代 .innerTexteslint plugin unicorn 规则详解prefer dom node text content —— 用 .textContent 替代 .inLint代码质量eslint-plugin-unicorn prefer-regexp-escape 规则详解用 RegExp.escape() 替代手写正则转义eslint plugin unicorn prefer regexp escape 规则详解用 RegExp.escape 替代手写正则转义 导读 prefLint代码质量上一篇GPyOpt项目安装与使用教程下一篇【亲测免费】 Ant Design X Vue 安装与配置指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
同步电机与构网型变流器频率稳定性仿真:从VSG控制到参数扫描 1. 同步电机与构网型变流器,为什么总被放在一起研究做新能源并网仿真的同行,这两年一定没少听见“构网型”三个字。光伏、风电通过电力电子变流器接入电网后,系统里的同步电机占比越来越低,旋转设备提供的转子惯量和阻尼效应都被削… · 2026/9/26 6:50:22
金融服务系统落地全解析:账户、对账、风控与合规 金融服务这几年听起来特别热,但真正动手做过的人都知道,一个能上线、敢跑真实资金流的系统,和“看起来功能齐全”的Demo完全是两码事。我过去几年一直在做金融科技侧的基础服务建设,从账户体系到清结算再到风控合规,踩… · 2026/9/26 6:50:22
用一套Agent Skills自动化小红书获客:从关键词到线索的完整流水线 1. 找客户这件事,为什么值得用一整套 Skills 来跑1.1 先说一个我实际经历过的时间黑洞两个月前帮一个做女性个护的品牌搭小红书获客流程,对方给的诉求特别朴素:每天有人在小红书上问“这个在哪买”“有没有链接”,但我们根本盯不过… · 2026/9/26 6:50:22
西莫电机论坛视频+PDF资源高效实战指南:工程师必备方法 2025年西莫电机论坛的“视频PDF”资源,我几乎天天都泡在里面用。做了十几年的电机设计,我的网盘里存着从论坛上攒下来的几百份资料,很多项目方案的突破口,都是靠这些资源逼出来的。这篇文章不打算给你列一个“十大必下资料榜单”&… · 2026/9/26 7:25:09
多Agent协作系统实战:架构设计、任务调度与避坑指南 1. 多Agent协作到底在解决什么问题1.1 从单Agent的瓶颈说起如果你最近半年动手搭过基于大模型的自动化流程,大概率经历过这样一个阶段:一开始用一个Agent加一堆工具,感觉无所不能,写代码、查资料、做总结都能干。但任务一复杂&… · 2026/9/26 7:25:09
R语言机器学习诊断模型实战:9种模型对比与完整流程总结 1. 我为什么花两周把9种机器学习诊断模型全部跑了一遍先说结论:如果你也有医学或生物信息学背景,想在手头只有一份Excel表格的情况下,用机器学习做诊断模型或者预测模型,R语言是目前性价比最高的选择。我这次把9种常见模型全部跑了… · 2026/9/26 7:25:09
用ThinkPHP打造学生成绩分析与教务管理系统 写这套系统的时候,我手里正攥着一堆从教务处拷出来的Excel成绩单,一个班一个班地筛平均分、算及格率,数据一多表格就卡,公式一拖就错位,更别提跨学期对比学生成绩趋势这种“想想就头大”的需求。后来实在忍不了&#x… · 2026/9/26 7:25:09
Qwen-Agent本地部署实战:OpenAI兼容协议与tool call全链路调通 1. 这不是“又一个部署教程”,而是把 Qwen-Agent 当成真实产品来跑通的实操记录我从去年底开始系统性地在本地跑各种大模型应用框架,从 LangChain 到 LlamaIndex,再到 Dify、FastChat、Ollama 的生态工具链,踩过太多“能启动但不能… · 2026/9/26 7:25:09
我用 go-zero 搭了一套海外短剧推荐系统:全景架构拆解 标题备选
我用 go-zero 搭了一套海外短剧推荐系统:从 API 网关到 MMoE 精排的全景架构规则先行、模型可插拔:一个短剧推荐系统的完整架构拆解go-zero gRPC ES Redis Triton:推荐系统落地全景(附踩坑清单)
摘要&… · 2026/9/26 7:25:03
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46