You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:27:04