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