# Exclude

## Challenge

Implement the built-in `Exclude<T, U>`

. Exclude from `T`

those types that are
assignable to `U`

. For example:

```
type T0 = Exclude<"a" | "b" | "c", "a">; // expected "b" | "c"
type T1 = Exclude<"a" | "b" | "c", "a" | "b">; // expected "c"
```

## Solution

The important detail here is a knowledge that conditional types in TypeScript are distributive.

So that when you are writing the construct `T extends U`

where `T`

is the union,
actually what is happening is TypeScript iterates over the union `T`

and applies
the condition to each element.

Therefore, the solution is pretty straightforward. We check that `T`

can be
assigned to `U`

and if so; we skip it:

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

## Comments