tsconfig无es2023选项时,如何使用Array.prototype.findLast?
问题描述
我的tsconfig配置片段:
{ "compilerOptions": { "lib": [ "es2022", "dom" ], // 其他配置... } }
代码中使用Array.prototype.findLast后,TypeScript报错:
Property 'findLast' does not exist on type 'Unit[]'. Do you need to change your target library? Try changing the 'lib' compiler option to 'es2023' or later.
将lib改为es2023后,ESLint又报错:
ESLint: Parsing error: Invalid value for lib provided: es2023
当前环境版本:TypeScript ~5.1.6,ESLint 8.56.0(配置声明为^8.18.0),目标浏览器均支持findLast方法。
一、TypeScript推荐es2023的原因
Array.prototype.findLast属于ES2023的新增特性,TypeScript的错误提示是基于特性归属的标准逻辑生成的,但TypeScript 5.1.x版本尚未正式将es2023作为可配置的lib选项(该选项在TypeScript 5.2及以上版本才正式支持)。提示逻辑仅关联特性的ES版本归属,未考虑当前TypeScript版本的lib选项支持范围,因此出现矛盾的推荐提示。
二、不使用//@ts-ignore的解决方案
方案1:单独引入findLast的类型定义
在tsconfig的compilerOptions.lib中添加"esnext.array.findlast",该选项在TypeScript 5.1.x中有效,专门用于引入数组findLast/findLastIndex的类型支持,同时不会触发ESLint报错:
{ "compilerOptions": { "lib": [ "es2022", "dom", "esnext.array.findlast" ], // 其他配置... } }
方案2:升级TypeScript到5.2+版本
TypeScript 5.2及以上版本正式支持es2023作为lib选项,升级后直接将lib改为["es2023", "dom"]即可。同时需同步升级@typescript-eslint/parser到支持TypeScript 5.2的版本,确保ESLint能识别es2023选项。
方案3:调整ESLint解析器配置
若坚持使用TypeScript 5.1.x且想配置es2023,需升级@typescript-eslint/parser到支持识别es2023 lib的版本(如v6.0+),并在ESLint配置中确保parserOptions.project指向正确的tsconfig文件,让ESLint通过TypeScript配置解析lib选项,而非自行校验。
内容的提问来源于stack exchange,提问作者Paflow

