TypeScript ESLint报"parsing error ']' expected"解析错误如何解决?
问题根源
你代码中用到的{ [K in keyof T as T[K]]: K }属于 TypeScript 4.1 版本新增的映射类型键重映射特性,你当前使用的 TypeScript 3.9.7 原生不支持该语法,配套的低版本@typescript-eslint/parser也没有对应语法的解析能力,所以会抛出「parsing error ']' expected」的解析错误。
解决方法
- 方案1(推荐):升级依赖版本
把TypeScript升级到4.1及以上版本,同时把@typescript-eslint/parser、@typescript-eslint/eslint-plugin升级到v4.10.0及以上版本,即可原生支持该语法,不需要修改业务代码。 - 方案2(兼容低版本TS):改写类型声明
如果无法升级TypeScript版本,可以用TS 3.9支持的语法实现等价的类型效果,代码示例如下:type SwapKeyAndValue<T extends Record<string, string>> = { [P in T[keyof T]]: Extract<keyof T, { [K in keyof T]: T[K] extends P ? K : never }[keyof T]> } export const swapKeyAndValue = <T extends Record<string, string>>(obj: T): SwapKeyAndValue<T> => { const newObj: Record<string, string> = {} for (const prop in obj) { newObj[obj[prop]] = prop } return newObj as SwapKeyAndValue<T> } - 方案3:修复.tsx文件泛型识别问题
如果你的文件后缀为.tsx,泛型尖括号会被解析器误识别为JSX标签,只需要在泛型参数后加一个逗号即可解决,修改后代码如下:export const swapKeyAndValue = <T extends { [index: string]: string },>( obj: T ) => { const newObj: { [prop: string]: string } = {} for (const prop in obj) { newObj[obj[prop]] = prop } return newObj as { [K in keyof T as T[K]]: K } }
内容的提问来源于stack exchange,提问作者Acid Coder
相关产品推荐
相关产品推荐

