Как расширить модуль в рамках проекта?
Я использую fastify с плагином fastify-static. Я также предоставляю свое собственное объявление типов 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
}
Дополнительно плагин расширяет возможности FastifyReply
с методом 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.ts
или же typings/fastify/index.d.ts
он переопределяет модуль вместо дополнения. Как я могу увеличить fastify
модуль в объеме проекта?
1 ответ
Решение
Тициан Черникова-Драгомир был прав. Модуль дополнения должен быть в 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>
}
}
}