import type { Abortable } from './Abortable'; export type AbortableCreator = (a: T) => Abortable; type ExtractGeneric = Type extends Abortable ? X : never; export type Tail = T extends [ignore: any, ...toReturn: infer R] ? R : never; export type Head any)[]> = T extends [toReturn: infer R, ...ignore: any] ? R : any; export type Last any)[]> = T extends [...ignore: any, toReturn: infer R] ? R : any; export type CheckChained any)[]> = { [K in keyof T]: K extends keyof Tail ? [T[K], Tail[K]] extends [(arg: infer AA) => infer RA, (arg: infer AB) => any] ? [ExtractGeneric] extends [AB] ? T[K] : (arg: AA) => ExtractGeneric : never : T[K]; }; export {};