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

更新ANTLR默认TypeScript语法时的条件类型解析问题

解决ANTLR TypeScript语法解析条件类型时数组括号匹配错误

问题根源

报错提示在[处缺少?,说明解析器匹配到any后,错误进入条件类型分支,期望?而非数组括号。核心原因是条件类型规则优先级高于数组类型,导致解析器未完成数组类型匹配就提前尝试匹配条件类型语法结构。

修复方案

1. 调整类型规则优先级

按照TypeScript官方语法优先级,将条件类型设为最低优先级,确保数组、联合/交叉类型等先被匹配。重构type_相关规则如下:

type_
    : unionType
    ;

unionType
    : intersectionType ( '|' intersectionType )*
    ;

intersectionType
    : conditionalType ( '&' conditionalType )*
    ;

conditionalType
    : primaryType 'extends' type_ '?' type_ ':' type_
    | primaryType  // 无法匹配条件类型时回退到基础类型
    ;

2. 确保数组类型规则正确

检查primaryType中的数组类型定义,保证能递归匹配多层数组结构:

primaryType
    : predefinedPrimType
    | arrayPrimType
    | tupleType
    | genericType
    // 其他基础类型规则(如字面量、函数类型等)...
    ;

arrayPrimType
    : primaryType '[' ']'
    ;

3. 排查Lexer规则

确认Lexer中[和]被正确定义为独立令牌,无其他规则干扰其识别:

LBRACK : '[';
RBRACK : ']';

验证

修改后重新生成解析器,测试目标代码type Boxed<T> = T extends any[] ? BoxedArray<T[number]> : BoxedValue<T>;,此时any[]会被正确解析为数组类型,条件类型的语法结构也能正常识别。

内容的提问来源于stack exchange,提问作者bczup

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 01:53:16