TypeScript中能否反转联合类型的顺序?
TypeScript联合类型顺序对错误提示的影响及反转尝试
核心问题
一般来说TypeScript的联合类型顺序不影响类型校验逻辑,但在包含交叉类型的数组联合场景中,顺序会直接决定无效赋值时错误提示的友好程度。
类型定义示例
type A = { isFoo: true, foo: number } type B = { isBar: true, bar: number } // 交叉类型放在最后的联合数组类型 type C = [A] | [B] | [A & B] // 交叉类型放在最前的联合数组类型 type D = [A & B] | [B] | [A]
错误提示差异对比
赋值给
C时的错误提示:const c: C = [{ isFoo: true, foo: 1, isBar:true }]报错信息:
Object literal may only specify known properties, and 'isBar' does not exist in type 'A'.
该提示优先匹配了[A]分支,没有考虑到值其实可以对应[A & B]分支,提示不够精准。赋值给
D时的错误提示:const d: D = [{ isFoo: true, foo: 1, isBar:true }]报错信息:
Property 'bar' is missing in type '{ isFoo: true; foo: number; isBar: true; }' but required in type 'B'
这个提示更友好,因为TypeScript先尝试匹配[A & B]分支,发现缺少bar属性后,再匹配[B]分支给出准确提示。
自定义反转工具的困境
尝试过编写自定义Reverse类型工具来调整联合类型的顺序,但最终生成的类型实际顺序并未发生改变,因此疑惑是否存在可靠的实现方式来手动控制联合类型的匹配顺序。
内容的提问来源于stack exchange,提问作者Kevin Kihata
相关产品推荐
相关产品推荐

