ค้นหาเว็บไซต์

javascript - typescript, วิธีอ้างอิง OAuth2Client ที่ไม่ได้ถูกส่งออก? google-api-nodejs-client


ฉันกำลังพยายามทำตามบทเรียน https://developers.google.com/sheets/api/quickstart/nodejs ฉันกำลังใช้ typescript และฉันชอบคุณสมบัติการกำหนดชนิดและการเติมข้อความอัตโนมัติที่มันให้มา และฉันอยากจะเขียนตัวอย่างใหม่ใน typescript และแบบ async แทนการใช้ callback น่าเสียดายที่ฉันติดปัญหา OAuth2Client ในโค้ดของฉัน ฉันสร้างไคลเอนต์ oauth ภายในฟังก์ชันแบบนี้:

async function setupClient() {
  const content: string = await fs.readFile("credentials.json", "utf8");
  const credentials = JSON.parse(content);
  // eslint-disable-next-line camelcase
  const { client_secret, client_id, redirect_uris } = credentials.installed;
  const oAuth2Client: o2 = new google.auth.OAuth2(
    client_id,
    client_secret,
    redirect_uris[0]
  );
  type OAuth2Client = typeof oAuth2Client;
  return oAuth2Client;
}

และฉันต้องการมอบหมายลูกค้านั้นให้กับฟังก์ชันการตั้งค่าอื่นสองฟังก์ชัน:

function setupAuthUrl(oAuth2Client, scopes) {
  const authUrl = oAuth2Client.generateAuthUrl({
    access_type: "offline",
    scope: scopes,
  });
  return authUrl;
}
function setupToken(oAuth2Client, code) {
  //code
}

แต่ฉันกำลังประสบปัญหาในการทำเครื่องหมายประเภท oauth2client เนื่องจากมันไม่ได้ถูกเปิดเผยโดยตรงโดยสิ่งใดสิ่งหนึ่ง? มีคนคาดว่ามันคงถูกเปิดเผยภายใต้ namespace 'oauth2_v2'? แต่ดูเหมือนว่าจะไม่ใช่

ฉันกำลังมองหาวิธีในการอ้างอิงประเภทนี้ก่อนการสร้างอินสแตนซ์ โดยเฉพาะอย่างยิ่งผ่านการนำเข้า น่าเศร้าที่เมื่อทำการติดตั้งไลบรารีนี้ผ่าน npm install googleapis มันไม่ได้ให้การขึ้นต่อกับทั้ง google-auth-library หรือ googleapis-common ซึ่งเป็นที่ที่มันถูกส่งออกและเปิดเผยเพื่อการนำเข้า eslint จะแสดงข้อผิดพลาดเว้นแต่จะมีการเพิ่มการขึ้นต่อ และฉันพยายามไม่เข้าใจว่าทำไมจึงจำเป็น เพราะประเภทนี้ควรสามารถเข้าถึงเพื่อการเติมโค้ดได้อย่างง่ายดาย

สำหรับการสร้างชื่อแทนประเภท:

type OAuth2Client = typeof GoogleApis.prototype.auth.OAuth2.prototype;

นี่คือทางเลือกเดียวที่ฉันสามารถคิดออกซึ่งไม่ส่งข้อผิดพลาด/คำเตือน (object as namespace) สำหรับการสร้าง alias นี่เป็นบรรทัดยาวและแปลกมากเช่นกันเมื่อมาจากภาษา OO อื่น ๆ

  • TLDR: วิธีที่นิยมในการเข้าถึง OAuth2Client และอาจรวมถึงประเภทอื่น ๆ สำหรับการเติมโค้ดใน TypeScript คืออะไร?

คำตอบ #1

ณ วันที่ 19 มิถุนายน คำร้องในการรวมเพื่อเพิ่มคุณสมบัตินี้ได้รับการอนุมัติแล้ว https://github.com/googleapis/google-api-nodejs-client/issues/2208

import { google, Auth } from 'googleapis';
const oauthClient: Auth.OAuth2Client = new google.auth.OAuth2();

ขอบคุณ angelxmoreno สำหรับตัวอย่าง

บทความที่เกี่ยวข้อง