export interface Fn = [], Return = void> { (...props: Params): Return; } export interface AsyncFn = [], Return = void> { (...props: Params): Promise; } export type SetStateFn = ( value: S | ((prevState: S) => S), ) => void; export type Parameter< F extends Fn<[any]> | SetStateFn | undefined, I extends number = 0, > = Parameters>[I];