type RecordToUnion> = T[keyof T] type UnionToIntersection = ( U extends unknown ? (arg: U) => 0 : never ) extends (arg: infer I) => 0 ? I : never export type ShortEmits> = UnionToIntersection< RecordToUnion<{ [K in keyof T]: T[K] extends (...args: any[]) => any ? (evt: K, ...args: Parameters) => void : (evt: K, ...args: T[K]) => void }> >