Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // tslint:disable:no-any
- // tslint:disable:no-console
- // tslint:disable:no-shadowed-variable
- import * as express from "express";
- const req = {
- a: 1,
- b: "2"
- };
- export type IRequestMiddleware<T> = (request: any) => Promise<T>;
- export type IRequestHandler<T> = (request: any) => Promise<T>;
- const extractAmw: IRequestMiddleware<number> = (req: any): Promise<number> =>
- Promise.resolve(req.a);
- const extractBmw: IRequestMiddleware<string> = (req: any): Promise<string> =>
- Promise.resolve(req.b);
- const curriedTypedHandler = (a: number) => (b: string): IRequestHandler<{}> => {
- return request => Promise.resolve({ "A:": a, "B:": b });
- };
- const withRequestMiddleware = <T>(mw1: IRequestMiddleware<T>): ((h) => any) => {
- return curriedTypedHandler => {
- return async request => {
- const mwResult = await mw1(request);
- return curriedTypedHandler(mwResult);
- };
- };
- };
- const h1 = withRequestMiddleware(extractAmw)(curriedTypedHandler)(req).then(
- curriedTypedHandler =>
- withRequestMiddleware(extractBmw)(curriedTypedHandler)(req)
- );
- h1.then(req).then(console.log);
Add Comment
Please, Sign In to add comment