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

TypeScript中google-auth-library的payload类型定义报错

问题原因

你遇到的Property 'payload' is private and only accessible within class 'LoginTicket'报错,核心原因有两个:

  1. google-auth-library的LoginTicket类中,payload属性被声明为私有成员,TypeScript不允许外部代码直接访问类的私有属性,必须通过类暴露的公开方法获取值。
  2. 你之前尝试的几种类型标注语法本身存在错误,没有正确匹配TS的类型标注规则。
正确实现方式

库本身已经内置了完整的payload类型定义TokenPayload,不需要你手动重复声明字段,直接导入使用即可,同时要通过官方公开的getPayload()方法获取payload值,不要直接解构私有属性:

// 导入内置的TokenPayload类型
import { OAuth2Client, TokenPayload } from "google-auth-library";
const client = new OAuth2Client(process.env.GOOGLE_ID);

async google({ idToken }: GoogleInput): Promise<RegisterSuccess> {
    const clientId = process.env.GGOOGLE_ID;
    // 先获取verifyIdToken返回的LoginTicket实例
    const ticket = await client.verifyIdToken({ idToken, audience: clientId });
    // 调用公开方法getPayload获取payload,直接用内置类型标注
    const payload = ticket.getPayload() as TokenPayload;

    // 如果你需要在官方类型基础上扩展自定义字段,可以用交叉类型:
    // type CustomPayload = TokenPayload & { yourCustomField: string };
    // const payload = ticket.getPayload() as CustomPayload;

    console.log(payload);
    return {
        success: true,
        message: "Authentication successfull!",
    }
}
之前写法的错误说明
  • const { payload }: {Payload}属于语法错误,TS对象类型标注需要明确键名和对应类型,正确结构应为{ payload: 对应类型 },直接写类型名不符合语法规则。
  • const { payload: Payload }是变量重命名语法,作用是把解构出的payload值赋值给名为Payload的变量,完全不是类型标注。
  • 引入LoginTicket后尝试解构的写法依然报错,本质还是因为直接访问了类的私有属性,和类型标注无关,只要直接访问私有成员就会触发TS的访问控制校验。

如果你非要用解构写法(不推荐,违反类的封装设计),可以通过类型断言绕开私有属性校验:

const ticket = await client.verifyIdToken({ idToken, audience: clientId });
const { payload } = ticket as unknown as { payload: TokenPayload };

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:54:47