You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript编写Puppeteer转译CommonJS时遇TS2420错误求助

解决Firebase Functions TypeScript转译时TS2420错误的方案

这个错误我之前也碰到过,本质是firebase-functions和firebase-admin的类型定义版本不匹配导致的接口实现冲突——UserRecordMetadata(来自firebase-functions)和UserMetadata(来自firebase-admin)的属性定义不一致,才会报"lastSignedInAt缺失"的错误。下面是具体的解决步骤:

1. 统一firebase-functions和firebase-admin的版本

这是最核心的解决办法,两个包的版本必须严格匹配,否则类型定义很容易出现冲突:

  • 先查看当前安装的版本:
    npm list firebase-functions firebase-admin
    
  • 卸载现有版本,重新安装兼容的版本组合(推荐安装最新稳定版,或者官方文档指定的配套版本):
    npm uninstall firebase-functions firebase-admin
    npm install firebase-functions@latest firebase-admin@latest
    
    如果最新版还是有问题,可以尝试指定已知兼容的版本对,比如:
    npm install firebase-functions@4.5.0 firebase-admin@11.11.0
    

2. 清理缓存和编译输出

有时候旧的编译缓存会干扰新的类型检查,清理后重新编译:

  • Linux/macOS:
    rm -rf node_modules/.cache dist && tsc -p config.json
    
  • Windows:
    rmdir /s /q node_modules\.cache dist && tsc -p config.json
    

3. 检查tsconfig.json配置

确保你的TypeScript配置符合Firebase Functions的要求:

  • 确认compilerOptions里的module设置为CommonJS,target设置为Firebase支持的Node.js版本对应的ES标准(比如Node.js 16+对应ES2017);
  • 确保types数组包含两个包的类型定义,示例配置片段:
    {
      "compilerOptions": {
        "module": "CommonJS",
        "target": "ES2017",
        "types": ["firebase-functions", "firebase-admin"],
        "outDir": "dist"
      }
    }
    

4. 临时绕过方案(不推荐长期使用)

如果以上步骤都没解决,你可以用类型断言临时绕过类型检查,但这只是权宜之计,还是建议优先解决版本匹配问题:

import * as admin from "firebase-admin";
import { UserRecordMetadata } from "firebase-functions/lib/providers/auth";

// 在使用时进行类型断言
const userRecord = await admin.auth().getUser("user-uid");
const metadata = userRecord.metadata as unknown as UserRecordMetadata;

另外补充一句:现在Firebase Functions支持的Node.js运行时(16、18、20版本)都已经原生支持async/await了,如果你的项目还在使用旧版本的Node.js运行时,建议升级到官方支持的最新版本,这样甚至可以直接用JavaScript编写代码,不需要转译TypeScript。

内容的提问来源于stack exchange,提问作者Relm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:37:21