此页内容

约 200 字小于 1 分钟

2022-12-01

题目

Github: Exclude

实现内置的Exclude <T, U>类型,但不能直接使用它本身。

从联合类型T中排除U的类型成员,来构造一个新的类型。

type Result = MyExclude<'a' | 'b' | 'c', 'a'> // 'b' | 'c'

解题思路

在 typescript 中, 条件类型是 可分配的。 在 T extends UT 是联合类型时,实际上发生的是 typescript 遍历联合类型 T 中的每一个元素,并将条件判断应用到每一个元素上。

所以可以通过这一特性,检查 T 的元素是否满足 U 的约束,如果是,则跳过

type MyExclude<T, U> = T extends U ? never : T

答案

参考

分配条件类型 Distributive Conditional Types