如何合并两个TypeScript联合类型?求正确实现方法
TypeScript合并两个联合类型的正确方法
你之前的写法失效核心是类型运算符优先级的问题:&(交叉类型)的优先级高于|(联合类型),导致代码被解析成了不符合预期的结构:
type B = 4 | 5 & A会被解析为4 | (5 & A),而5不在A的成员里,5 & A结果是never,最终B的类型是4type C = A & 4 | 5会被解析为(A & 4) | 5,同理A &4是never,最终C的类型是5
而你写的D和E用了交叉类型&,但交叉类型的作用是让类型同时满足多个约束(比如合并对象属性),对于没有重叠成员的原始值联合类型,交叉后结果只能是never,完全不适合用来合并联合类型。
合并两个联合类型的正确方法非常直接,直接用|把两个联合类型整体拼接即可:
type A = 1 | 2 | 3 // 直接拼接目标成员 type X = A | 4 | 5 // 结果为 1 | 2 | 3 | 4 | 5 // 如果另一组成员也是单独的类型,同样直接用|合并 type F = 4 | 5 type X2 = A | F // 同样得到目标类型
内容的提问来源于stack exchange,提问作者SageJustus
相关产品推荐
相关产品推荐

