tstype App<F, X> = F extends Fun ? (F & { arg: X })["ret"] : never; interface Fun { arg: unknown; ret: unknown; }