type LastElement = T extends [...unknown[], infer LastItem] ? LastItem : never; type Operator = (value: A) => B; type OperatorA = T extends Operator ? A : never; type OperatorB = T extends Operator ? B : never; type PipeOperators = Operators extends [infer Item, ...infer Tail] ? [Operator>, ...PipeOperators>] : Operators; type PipeOperatorsOutput = OperatorB>; declare function _pipe(...operators: PipeOperators): (input: Input) => PipeOperatorsOutput;