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];