declare module "puerts" { import {$Ref, $Task, System} from "csharp" function $ref(x? : T) : $Ref; function $unref(x: $Ref) : T; function $set(x: $Ref, val:T) : void; function $promise(x: $Task) : Promise; function $generic any> (genericType :T, ...genericArguments: (new (...args:any[]) => any)[]) : T; function $typeof(x : new (...args:any[]) => any) : System.Type; function $extension(c : Function, e: Function) : void; function on(eventType: string, listener: Function, prepend?: boolean) : void; function off(eventType: string, listener: Function) : void; function emit(eventType: string, ...args:any[]) : boolean; } declare function require(name: string): any;