news 2026/9/15 21:43:07

typescript-eslint 出现 “property is deprecated on nodes“ 警告怎么排查?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
typescript-eslint 出现 “property is deprecated on nodes“ 警告怎么排查?

typescript-eslint 出现 "property is deprecated on nodes" 警告怎么排查?

【免费下载链接】typescript-eslint:sparkles: Monorepo for all the tooling which enables ESLint to support TypeScript项目地址: https://gitcode.com/GitHub_Trending/ty/typescript-eslint

运行 ESLint 时,如果项目使用 typescript-eslint 作为 TypeScript 解析器,终端里可能会出现这样的 Node.js 警告:

The 'typeParameters' property is deprecated on TSCallSignatureDeclaration nodes. Use 'typeArguments' instead. See https://tseslint.com/key-property-deprecated.

这里的<key>(如typeParameters)、<type>(节点类型)和替换属性名会随触发场景变化。出现这个警告通常意味着:你装的某个 ESLint 插件(或其他处理 AST 的工具)还没有适配 typescript-eslint v6,它仍在读取已被弃用的 AST 属性名。下面按官方 FAQ(docs/troubleshooting/faqs/General.mdx)给出的路径逐步排查。

这个警告是怎么产生的

typescript-eslint v6 对部分 AST 属性做了改名:原来叫parameters的属性,实际含义是arguments,于是被改名为typeArguments。官方对术语的解释是:argument是你主动提供给接收方的东西(例如调用表达式中显式传入的类型),parameter是接收方用来接收它的声明(例如函数声明的泛型参数)(见 v6 发布公告 packages/website/blog/2023-07-09-announcing-typescript-eslint-v6.md 中 "AST Breaking Changes" 一节)。

为了保证兼容性,旧属性名并没有被删除,而是在解析器里以"弃用别名 getter"的形式保留。当你看到警告时,其实是有人在读取这个别名。在解析器源码 convert.ts 中可以看到:

  • 读取弃用别名时会通过process.emitWarning(..., 'DeprecationWarning')发出警告,消息模板就是The '<key>' property is deprecated on <type> nodes. Use '<newKey>' instead.
  • 同一个节点上的同一属性只警告一次(源码中的warned标志位),所以一次 lint 中同一位置不会刷屏;
  • 解析器还提供suppressDeprecatedPropertyWarnings选项(见 parser-options.ts),开启后别名仍可读取但不再告警——这属于"治标"手段,后面会说明适用条件。

关键点:警告不是你自己的配置问题,而是某个消费者在读取旧属性名。排查目标就是找到这个消费者。

排查步骤

第一步:把所有 ESLint 插件升级到最新版本

FAQ 给出的第一判断是:如果你看到这个警告,"likely you're using an ESLint plugin (or other tooling) that hasn't been updated for typescript-eslint v6"。先把eslint-plugin-*等相关依赖都升到最新版,再重新跑一次 lint。很多情况下插件新版已经改用typeArguments,警告自然消失。

第二步:不确定是哪个插件发出时,用两种方法定位

如果插件很多、都升到最新后仍有警告(或者你无法确认已覆盖所有插件),FAQ 给出两种手段,可单独使用也可组合:

  1. --trace-deprecation跑一次 lint。这是 Node.js 的 CLI 选项,会给弃用警告附带调用堆栈,从而看到是哪个插件的代码在读取该属性。FAQ 中给出的示例命令(npm run lint请替换成你项目里实际的 lint 脚本名):

    npx cross-env NODE_OPTIONS=--trace-deprecation npm run lint

    该命令只是额外带参数运行一次 lint 脚本,不会修改文件。观察输出中的堆栈,定位到具体的eslint-plugin-*包。

  2. 逐批禁用插件缩小范围。一次把一半插件从配置中禁用(或临时移除),看警告是否消失,据此二分法逐步收敛到出问题的插件。

注意第二种方式只改动你的 ESLint 配置,排查结束后记得恢复;排查期间 lint 结果会不完整,不要在禁用状态下依据结果改代码。

第三步:对定位到的插件跟进 v6 适配

FAQ 的建议是:确认该插件是否已有要求其"发布支持 typescript-eslint v6 版本"的 issue;如果还没有,去提一个。在插件发布新版之前,这个警告属于已知的外部依赖问题。

如果警告来自你自己写的规则

如果你自己开发 ESLint 插件/规则,且规则还需要同时兼容 typescript-eslint v5 和 v6,FAQ 给出的做法是回退读取旧属性名:

- node.typeParameters + node.typeArguments || node.typeParameters

优先读新属性typeArguments,不存在时再回退到旧名typeParameters。这样规则在 v6 下不会触发警告,在 v5 下也不会取到undefined

可选:临时抑制警告

如果定位到警告来源是暂时无法更新的第三方工具,又想让输出干净一些,可以在解析器选项中开启suppressDeprecatedPropertyWarnings(解析器选项定义见 parser-options.ts)。开启后旧属性名仍可正常读取,只是不再打印警告。

适用条件:只在警告来源已明确、且你确认其读取的是兼容别名而不是真 bug 的情况下使用。不要用它掩盖还没定位的来源——那样会失去唯一的外显信号。

验证修复是否生效

  • 升级插件后重新完整跑一次 lint,警告不再出现即为修复成功;
  • 若曾开启suppressDeprecatedPropertyWarnings,临时关掉它再跑一次:如果警告仍不出现,说明确实是某个插件在 v6 下不再读取旧属性;如果警告又出现,说明还有插件没有适配完,回到第二步继续定位。

这个警告本身不影响 lint 结论(别名返回的是正确值),但它是一个明确的升级信号:警告里点名的属性名和节点类型,正是当前还有工具停留在 typescript-eslint v5 AST 结构的证据。按上面的顺序走一遍——升插件、trace 定位、跟进 issue——通常就能闭环。

【免费下载链接】typescript-eslint:sparkles: Monorepo for all the tooling which enables ESLint to support TypeScript项目地址: https://gitcode.com/GitHub_Trending/ty/typescript-eslint

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 21:41:33

WebRTC 老是连不通?Cloudflare TURN 生产级落地完整指南

WebRTC 老是连不通&#xff1f;Cloudflare TURN 生产级落地完整指南 【免费下载链接】skills Skills Catalog for Codex 项目地址: https://gitcode.com/GitHub_Trending/skills4/skills WebRTC 通话里&#xff0c;只要两端藏在 NAT 或公司防火墙后面&#xff0c;直连就…

作者头像 李华
网站建设 2026/9/15 21:41:24

Loop:三步配好 macOS 窗口管理

Loop&#xff1a;三步配好 macOS 窗口管理 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 下午三点&#xff0c;你又去拖某个窗口的右下角&#xff0c;想把它塞进屏幕左半边&#xff0c;边缘却总差着几…

作者头像 李华
网站建设 2026/9/15 21:40:35

AI Agent工程化开发:从LLM到RAG再到Agent的90天实战切片

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/15 21:40:09

Vue3+OpenLayers加载GeoTIFF:前端栅格可视化完整实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/15 21:39:59

Ubuntu 26.04 cuDNN安装避坑指南:动态库路径与内核模块加载机制详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/15 21:39:49

superpowers开发工作流:从Codex CLI到Cursor的AI编程协作者实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华