繁体   English   中英

如何使用 TypeScript 在 Fastify 中扩展 Request 的接口

[英]How do I extend Request's interface in Fastify with TypeScript

我在项目的根目录中有这个声明文件,名为fastify.d.ts

import { auth } from "firebase-admin";

declare module 'fastify' {
  interface FastifyRequest {
    user: auth.DecodedIdToken
  }
}

我一直在使用将user设置为传入请求,例如:

export default async function mustBeLoggedIn(
  req: FastifyRequest,
  reply: FastifyReply
) {
  try {
    const token = req.headers.authorization?.replace("Bearer ", "") ?? "";

    const result = await auth.verifyIdToken(token);

    req.user = result;
  } catch (err) {
    reply.status(401).send({
      error: "You must be logged in to access this resource",
    });
  }
}

我收到错误: middlewares/mustBeLoggedIn.ts(13,9): error TS2339: Property 'user' does not exist on type 'FastifyRequest<RouteGenericInterface, Server, IncomingMessage>'.

当前tsconfig.json

{
  "compilerOptions": {
    "target": "es6",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "noEmit": true,
    "esModuleInterop": true,
    "module": "commonjs",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "preserve",
  },
  "include": ["**/*.ts", "**/*.d.ts"],
  "exclude": ["node_modules"]
}

我怎样才能解决这个问题? 谢谢!

添加

  "ts-node": {  "files": true },

tsconfig.json根级别。

https://stackoverflow.com/a/68488480/6398044

尝试导入 FastifyRequest,像这样:

import FastifyRequest from "fastify";
import { auth } from "firebase-admin";

declare module 'fastify' {
  interface FastifyRequest {
    user: auth.DecodedIdToken
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM