Slide 24
Slide 24 text
© teamLab Inc.
Middleware Type Refinement – Honoの例(pipeチェーン)
24
middlewareが3つの場合の定義→
(すごい)
https://github.com/honojs/hono/blob/7e62
bcd22fa4e8f0e83cb564bac85e32f5434dd3/src
/types.ts#L127
直前までのmiddlewareで拡張されたContext
を、各middlewareに順番に渡すような推論
は難しい
// app.get(handler x 4)
<
P extends string = CurrentPath,
R extends HandlerResponse = any,
I extends Input = BlankInput,
I2 extends Input = I,
I3 extends Input = I & I2,
I4 extends Input = I & I2 & I3,
E2 extends Env = E,
E3 extends Env = IntersectNonAnyTypes<[E, E2]>,
E4 extends Env = IntersectNonAnyTypes<[E, E2, E3]>,
E5 extends Env = IntersectNonAnyTypes<[E, E2, E3, E4]>,
// Middleware
M1 extends H = H,
M2 extends H = H,
M3 extends H = H,
>(
...handlers: [H & M1, H & M2, H &
M3, H]
): HonoBase<
IntersectNonAnyTypes<[E, E2, E3, E4, E5]>,
S &
ToSchema<
M,
P,
I4,
| MergeTypedResponse
| MergeMiddlewareResponse
| MergeMiddlewareResponse
| MergeMiddlewareResponse
>,
BasePath,
CurrentPath
>
Honoの内部実装