This is the identity function with special type annotations.

Swipe the type argument with a superset without giving up type safety.

If A is assignable to BEvt<A> is assignable to Evt<B>

e.g:Evt<1|2|3> is assignable to Evt<number> however typescript wont let you do this assignation. This is where Evt.loosenType come in handy.

import { Evt } from "evt";
declare const evFooBar: Evt<"FOO" | "BAR">;
declare function myFunc(evtText: Evt<string>): void;
myFunc(evtFooBar); //Gives a type error;
myFunc(Evt.loosenType(evtFooBar)); //OK