1

In an array there should be a list of functions. These functions should act like a pipeline.

For example:

const pipeline: Pipeline<number, string> = [
    (val: number) => {
        return { id: val };
    },
    (val: { id: number }) => {
        return val.id.toString();
    },
];

The pipeline should be typesafe, every function should infer its parameter's type automatically (by using the return type of the function before).

Following is my own draft, but as you see, the typesafety of my type is limited to the start and end type.

type Pipeline<StartType, EndType> =
    | [
          (val: StartType) => unknown,
          ...Array<(val: unknown) => unknown>,
          (val: unknown) => EndType
      ]
    | [(val: StartType) => EndType];
MeineHTMLCodes
  • 509
  • 5
  • 19
  • 2
    There is no specific type in TS that represents this. You want to say that `PipeLine` is a chain of functions for *some* tuple `T` of types that starts with `S` and ends with `E`, but there is no direct support for such "existential" types. Without that you can only make a *generic* `PipeLine` for a particular tuple `T` and then write a helper function to infer/validate `T`. Like [this](//tsplay.dev/N7P6Em). If that addresses your question, then I'll probably close this as a duplicate of [this question](https://stackoverflow.com/q/53173203/2887218). If not, what am I missing? – jcalz Mar 30 '22 at 18:12
  • 1
    Thank you for your answer. Yes this question might be a duplicate. Your solution is crazy, but it seems to work fine :) – MeineHTMLCodes Mar 31 '22 at 08:22

0 Answers0