type DropFirst<T extends (...args: any) => any> = T extends (first: any, ...rest: infer R) => any ? R : never;
Utility type to drop the first argument from a function type.
For example, for a function type (symbol: string, arg1: number, arg2: string) => Promise<void>,
this type will infer the rest of the arguments as [arg1: number, arg2: string].