代码之家  ›  专栏  ›  技术社区  ›  Freewind thk

无法正确理解typescript中的“Exclude<t,U>`

  •  1
  • Freewind thk  · 技术社区  · 6 年前

    typescript中有类型定义:

    type Exclude<T, U> = T extends U ? never : T;
    

    我们可以使用它从另一个类型中排除一个类型:

    type AB = 'a' | 'b'
    type AC = 'a' | 'c'
    
    type X = Exclude<AB, AC> 
    

    类型 X b 现在。

    Exclude

    type X = AB extends AC ? never : AC;
    

    类型 是不同的,不是 b 再也不是了 AC .

    我不明白为什么会有不同的表现。

    1 回复  |  直到 6 年前
        1
  •  6
  •   tmarwen    4 年前

    首先,如果你替换了内容, X 会是 type X = AB extends AC ? never : AB;

    Exclude ,每个并集成员分别经历条件,结果被并集。所以呢 Exclude<AC, AB> 相当于:

    type X = ('a' extends AC ? never : 'a') | ('b' extends AC ? never : 'b')
    

    T 不在另一个类型(如元组、数组或另一个泛型类型的参数)中使用,这就是为什么在条件中直接使用该类型不会产生相同的结果。你可以读更多 here