0

プラグインfastify-staticでfastifyを使用しています。また、このプラグインの独自の TypeScript 型宣言を で提供します。typings/fastify-static/index.d.ts

declare module "fastify-static" {
    import { Plugin } from "fastify";
    import { Server, IncomingMessage, ServerResponse } from "http";

    namespace fastifyStatic {
        const instance: Plugin<Server, IncomingMessage, ServerResponse, any>;
    }
    export = fastifyStatic.instance
}

さらに、プラグインはメソッドで fastifyFastifyReplyを拡張しsendFileます。

次のようにモジュール スコープで fastify モジュールを拡張すると、正常に動作します。

// server.js
import fastify from "fastify";
import fastifyStatic from "fastify-static";

declare module "fastify" {
    interface FastifyReply<HttpResponse> {
        sendFile: (file: string) => FastifyReply<HttpResponse>
    }
}

server.get("/file", async (request, reply) => {
    reply.sendFile('file')
});

残念ながら、このモジュールでのみ機能します。宣言を移動するtypings/fastify-static/index.d.tstypings/fastify/index.d.ts、拡張の代わりにモジュールをオーバーライドすると。 プロジェクト スコープでモジュールを拡張するにはどうすればよいですか?fastify

4

1 に答える 1

0

Titian Cernicova-Dragomir は正しかった。モジュールの拡張は にあると叫んでtypings/fastify-static/index.d.tsいますが、個別のモジュール宣言としてではありません。

// typings/fastify-static/index.d.ts

declare module "fastify-static" {
    import { Plugin } from "fastify";
    import { Server, IncomingMessage, ServerResponse } from "http";

    namespace fastifyStatic {
        const instance: Plugin<Server, IncomingMessage, ServerResponse, any>;
    }

    export = fastifyStatic.instance

    module "fastify" {
        interface FastifyReply<HttpResponse> {
            sendFile: (file: string) => FastifyReply<HttpResponse>
        }
    }
}
于 2018-09-26T12:27:32.730 に答える