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];
` 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– jcalz Mar 30 '22 at 18:12` 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?