ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

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

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 属性名。下面按官方 FAQdocs/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 youre using an ESLint plugin (or other tooling) that hasnt been updated for typescript-eslint v6。先把eslint-plugin-*等相关依赖都升到最新版再重新跑一次 lint。很多情况下插件新版已经改用typeArguments警告自然消失。第二步不确定是哪个插件发出时用两种方法定位如果插件很多、都升到最新后仍有警告或者你无法确认已覆盖所有插件FAQ 给出两种手段可单独使用也可组合用--trace-deprecation跑一次 lint。这是 Node.js 的 CLI 选项会给弃用警告附带调用堆栈从而看到是哪个插件的代码在读取该属性。FAQ 中给出的示例命令npm run lint请替换成你项目里实际的 lint 脚本名npx cross-env NODE_OPTIONS--trace-deprecation npm run lint该命令只是额外带参数运行一次 lint 脚本不会修改文件。观察输出中的堆栈定位到具体的eslint-plugin-*包。逐批禁用插件缩小范围。一次把一半插件从配置中禁用或临时移除看警告是否消失据此二分法逐步收敛到出问题的插件。注意第二种方式只改动你的 ESLint 配置排查结束后记得恢复排查期间 lint 结果会不完整不要在禁用状态下依据结果改代码。第三步对定位到的插件跟进 v6 适配FAQ 的建议是确认该插件是否已有要求其发布支持 typescript-eslint v6 版本的 issue如果还没有去提一个。在插件发布新版之前这个警告属于已知的外部依赖问题。如果警告来自你自己写的规则如果你自己开发 ESLint 插件/规则且规则还需要同时兼容 typescript-eslint v5 和 v6FAQ 给出的做法是回退读取旧属性名- 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),仅供参考
返回列表