【问题标题】:How do I extend Request's interface in Fastify with TypeScript如何使用 TypeScript 在 Fastify 中扩展 Request 的接口
【发布时间】:2021-10-23 09:21:57
【问题描述】:

我在项目的根目录中有这个声明文件,名为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"]
}

我该如何解决这个问题?谢谢!

【问题讨论】:

    标签: typescript fastify .d.ts


    【解决方案1】:

    添加

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

    tsconfig.json 的根级别。

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

    【讨论】:

      猜你喜欢
      • 2016-07-06
      • 1970-01-01
      • 2015-11-05
      • 2016-09-19
      • 2021-06-11
      • 2020-06-09
      • 2020-04-09
      • 1970-01-01
      • 2019-06-08
      相关资源
      最近更新 更多