【发布时间】:2018-08-11 03:28:27
【问题描述】:
我想在 typescript 中创建一个简单的 NOT 运算符,您可以在其中将所有原语组合到某个类型 A 的联合中,这些联合不是第二种类型 B 的联合的原始成员。这可以使用条件类型来完成。例如,如果您有类型:
type A = 'a' | 'b' | 'c';
type B = 'c' | 'd' | 'e';
...然后我想将它们映射到第三个派生类型 [A - B],在这种情况下,将产生:
type C = 'a' | 'b'
这似乎可以使用如下所示形式的条件来实现。但是,我完全不明白为什么下面的 NOT 运算符似乎给了我想要的东西,但明确地拼出完全相同的条件逻辑却没有:
type not_A_B_1 = A extends B ? never : A; // 'a' | 'b' | 'c'
type Not<T, U> = T extends U ? never : T;
type not_A_B_2 = Not<A, B> // 'a' | 'b'
见here。
如果我在这里遗漏了一些 TS 微妙之处,可以告诉我,这可以解释为什么 not_A_B_1 和 not_A_B_2 不等价吗?谢谢。
【问题讨论】:
标签: typescript negation