perlica
Version:
> [!WARNING] > 🚧 Work in progress!
21 lines (17 loc) • 469 B
text/typescript
export type Assert<
Actual,
Expected extends
| Equal< Actual, Expected >
| Mistake< "Got unexpected type", Actual >,
> = Actual;
export type Equal<Left, Right> =
(
<X>()=> (X extends Left ? 1 : 2)
) extends (
<X>()=> (X extends Right ? 1 : 2)
) ? unknown : never;
declare const MistakeSymbol: unique symbol;
export type Mistake<
Message extends string,
Info = never,
> = Message & { [ MistakeSymbol ]: Info };