The inferred or concrete type to validate
The expected destination type
This is a strict compile-time check that T is exactly assignable to D.
If T is not assignable to D, or if D is not assignable to T, this
will produce a compiler error.
Hack: This type uses recursive conditional types to force TypeScript to evaluate the types fully, causing an error to be thrown if the assertion fails.
Assert that a type is strongly assignable to another type.