callParserIfExistsQuery で型エラー
technote-space opened this issue · 1 comments
technote-space commented
Description
ERROR in /Users/***/server/$server.ts(135,42)
TS2684: The 'this' context of type 'void' is not assignable to method's 'this' of type 'FastifyInstance<Server, IncomingMessage, ServerResponse, FastifyLoggerInstance>'.
fastify の最新のリリースでコンテキストのチェックが追加されたようです。
fastify/fastify#3143
https://github.com/fastify/fastify/releases/tag/v3.18.1
export interface preValidationHookHandler<
RawServer extends RawServerBase = RawServerDefault,
RawRequest extends RawRequestDefaultExpression<RawServer> = RawRequestDefaultExpression<RawServer>,
RawReply extends RawReplyDefaultExpression<RawServer> = RawReplyDefaultExpression<RawServer>,
RouteGeneric extends RouteGenericInterface = RouteGenericInterface,
ContextConfig = ContextConfigDefault
> {
(
+ this: FastifyInstance<RawServer, RawRequest, RawReply>,
request: FastifyRequest<RouteGeneric, RawServer, RawRequest>,
reply: FastifyReply<RawServer, RawRequest, RawReply, RouteGeneric, ContextConfig>,
done: HookHandlerDoneFunction
): void;
}
とりあえず
const callParserIfExistsQuery = (parser: preValidationHookHandler): preValidationHookHandler => (req, reply, done) =>
Object.keys(req.query as any).length ? parser(req, reply, done) : done()
を
const callParserIfExistsQuery = (parser: preValidationHookHandler): preValidationHookHandler => (req, reply, done) =>
Object.keys(req.query as any).length ? parser : done()
に書き換えると型エラーは消えました。
エラー箇所は以下のように呼ばれていたので
preValidation: callParserIfExistsQuery(parseNumberTypeQueryParams([['take', true, false], ['skip', true, false]])),
parseNumberTypeQueryParams
に console.log
を仕込んだ状態でAPIを呼び出して上記の変更後も parseNumberTypeQueryParams
が呼ばれることは一応確認できましたが正しい修正の仕方かはわかりません。
Environment
- Package version:
v0.25.0
- OS:
- Linux
- Windows
- macOS
- Node.js version:
v15.10.0
- npm version:
7.5.3
Additional context
solufa commented
お待たせしました
@IshinoJun が修正してくれました
v0.25.1 にアップデートしてみてください