错误码参考

Qingkuai 的编译器和运行时可能会抛出带有错误码的提示信息,以帮助开发者快速定位问题。本节列出当前版本内置错误码及其含义,便于查阅和排查。错误码按功能类型分类,编号规则如下:

通过错误码快速查找具体信息,可提升排错效率并更好地理解框架的行为。


编译错误

状态码 描述
1001 空插值块
1002 意料之外的字符
1003 未闭合的插值块
1004 以结束标签开头(如 </div> 前不存在与之匹配的 <div>
1005 插值属性缺少名称(如仅写 !@#&
1006 静态属性值未使用单引号或双引号包裹
1007 插值属性值未使用花括号包裹
1008 静态属性值未闭合
1009 标签未闭合(包括开始标签、结束标签或注释标签)
1010 嵌入语言标签未在模板顶层使用
1011 嵌入脚本块超出限制(组件文件最多一个)
1012 标签缺少匹配的结束标签
1013 标签不能作为自闭合标签使用(如 <div />
1014 使用了组件文件中不允许的标签
1015 模板结构非法(如 <div> 嵌套在 <p> 内)
1016 属性格式非法
1017 使用了框架保留的标识符格式(以 __qk__ 开头的标识符)
1018 不支持的顶层 await 表达式
1019 嵌入脚本块中不支持 export 相关语法
1020 顶级作用域中重定义编译器内建标识符
1021 编译器内建方法使用位置或调用形式错误
1022 标识符不可重声明(与别名或衍生值标记冲突)
1023 响应式标记方式冲突(如 $ 简写与其他标记方式混用)
1024 alias 内建方法参数非法(必须且只能传入一个可写目标)
1025 alias 解构声明中包含不允许的模式
1026 指令冲突(不能在同一标签上共存)
1027 指令缺少必要的值
1028 属性重复或解析后冲突(含静态/动态/事件/引用属性冲突)
1029 表达式非法
1030 标签不接受当前属性类型(如错误的引用属性或事件属性)
1031 缺少前置指令(如 #elif#else#then#catch 等)
1032 上下文模式(context pattern)非法
1033 未识别的指令
1034 上下文模式为空(未声明任何绑定标识符)
1035 #html 指令的标签必须且只能有一个文本子节点
1036 #slot 指令使用位置非法(仅允许组件节点的一级子元素)
1037 指令绑定模式数量超限(如 #for#then 等)
1038 #slot 指令缺少合法插槽名(from 后必须为字符串字面量)
1039 <slot> 标签的 name 属性必须是静态值
1040 #target 指令使用位置非法(组件一级子元素上会导致目标歧义)
1041 期望表达式
1042 期望字符串字面量
1043 #key 指令只能与 #for 同时使用
1044 期望事件标志名
1045 未识别的事件标志
1046 事件标志冲突
1047 标签上的引用属性不合法(不在允许列表内)
1048 引用属性值非法(必须是标识符或成员表达式)
1049 省略写法的特殊属性名非法(无法转换为合法标识符)
1050 <slot>name 属性重复
1051 同一组件内重复分配到同名插槽
1052 嵌入脚本块不支持 TypeScript 命名空间声明
1053 alias 不能用于独立标识符别名化
1054 编译器内建方法不能用于 using / await using 声明
1055 不允许嵌套 <slot>
1056 Promise 块中 #then#catch 指令重复
1057 组件名称非法(无法转换为合法 JS 标识符或成员表达式)
1058 #html 指令不能用于组件或 <slot> 标签
1059 指定内建方法不支持扩展参数(spread element)
1060 元素标签名非法
1061 编译器内建方法不能在模板中使用
1062 响应式模式冲突(同一标签同时声明 reactiveshallow

编译警告

状态码 描述
9001 值恒定不变,响应式标记冗余(将按原始值处理)
9002 顶级作用域标识符在特定作用域中可能被覆盖
9003 混用两种衍生响应式值声明语法(不推荐)
9004 衍生响应式值为只读,使用可变声明冗余(建议改为 const
9005 对字面量 const 进行 raw 标记是冗余的
9006 指令不需要值,提供的值会被忽略
9007 布尔属性提供了冗余值,冗余值会被忽略
9008 #html 指令在无值且静态内容场景下无实际作用
9009 组件事件监听器上的事件标志无效,会被忽略
9010 在非键盘事件上使用键盘事件标志无效,会被忽略
9011 事件标志重复,重复项会被忽略
9012 在组件上使用 &dom 不会获取 DOM 元素,会退化为普通引用属性
9013 默认值定义重复,前者会被后者覆盖
9014 无必要的 qk:spread 标签(缺少其应承担的用途)
9016 内建方法参数超出预期,多余参数会被忽略

运行时错误

状态码 描述
2001 指定用途(如 #await)收到的值不是 Promise
2002 #for 指令值不可遍历
2003 #key 指令值存在重复项
2004 超出最大递归更新深度(常见于异步副作用/监视器中的递归更新)
2005 目标元素无效(不是合法 Element,或无法通过选择器获取)
2006 指定属性值必须是数组或 Set

运行时警告

状态码 描述
8001 执行副作用/监视器时未收集到任何响应式依赖,该副作用会被销毁
8002 对只读或无效目标执行赋值操作,赋值会被忽略

在github上编辑此页面