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

升级googleapis至144.0.0时遇认证类型不匹配TypeScript错误

解决googleapis升级后Sheets认证类型不兼容问题

问题根源

googleapis从v100升级到v144后,google-auth-library的类型系统做了调整:auth.getClient()返回的不再是单一的OAuth2Client类型,而是更通用的AuthClient类型集合(包含ExternalAccountAuthorizedUserClient等)。而Sheets客户端的类型定义未完全兼容这个宽泛类型,导致TypeScript抛出类型不匹配错误。

解决方案

方案一:直接使用GoogleAuth实例作为认证参数(推荐)

新版本的googleapis支持直接将GoogleAuth实例传入服务客户端,无需手动调用getClient(),既简化代码又解决类型问题:

修改认证函数:

export const authenticate = () => {
  return new google.auth.GoogleAuth({
    keyFile: path.join(__dirname + "/../config/google-apis-config.json"),
    scopes: ['https://www.googleapis.com/auth/spreadsheets',
      'https://www.googleapis.com/auth/drive'],
  });
};

修改Sheets调用逻辑:

export const getDataFromSheet = async (sheetId: string, sheetName: string) => {
  const auth = authenticate();
  const sheets = google.sheets({ version: 'v4', auth });
  
  const request = {
    spreadsheetId: sheetId,
    range: sheetName,
    majorDimension: 'ROWS'
  };
  const response = await sheets.spreadsheets.values.get(request);

  const data = response?.data?.values;
  return { cols: data?.shift(), rows: data };
}

方案二:显式类型断言(兼容原有逻辑)

如果需要保留getClient()的调用逻辑,可以通过类型断言明确指定客户端类型(适用于服务账号认证场景,此时返回的是JWT客户端,属于OAuth2Client子类):

import { OAuth2Client } from 'google-auth-library';

export const authenticate = async () => {
  const auth = new google.auth.GoogleAuth({
    keyFile: path.join(__dirname + "/../config/google-apis-config.json"),
    scopes: ['https://www.googleapis.com/auth/spreadsheets',
      'https://www.googleapis.com/auth/drive'],
  });
  
  // 断言为OAuth2Client,服务账号认证场景下实际类型兼容
  const client = await auth.getClient() as OAuth2Client;
  return client;
};

这样后续传入Sheets客户端的auth参数就能通过TypeScript类型校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:50:13