Как я могу ввести OAuthClient из googleapis? - PullRequest
0 голосов
/ 09 мая 2020

Я работаю над приложением nodemailer с gmail OAuth2 на TypeScript, с "noImplicitAny": true,"noImplicitReturns": true. Это требует, чтобы я явно указывал типы возвращаемых значений.

У меня есть этот фрагмент

import { google } from 'googleapis';

export const getOAuth2Client = (): OAuth2Client => { // 2. So I set the return type as OAuth2Client  
  const { OAuth2 } = google.auth;

  const auth2Client = new OAuth2(
    process.env.G_OAUTH_CLIENT_ID,
    process.env.G_OAUTH_CLIENT_SECRET,
    process.env.G_OAUTH_REDIRECT_URL
  );

  auth2Client.setCredentials({
    /* eslint-disable @typescript-eslint/camelcase */
    refresh_token: process.env.G_OAUTH_REFRESH_TOKEN,
  });

  return auth2Client; // 1. Inspecting auth2Client shows its of type OAuth2Client
};

Я получил тип OAuth2Client при проверке типа возвращаемого auth2Client. Проблема, однако, в том, откуда его импортировать и использовать в проекте.

Я пробовал следующее ...

import { google, OAuth2Client } from 'googleapis';

Это не удается, поскольку googleapis не имеет такого именованного экспорта.

Я также видел этот подход из @ ответ corolla , где он импортирует типы из google-auth-library

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

Я бы использовал sh, чтобы использовать тип без необходимость добавления другой библиотеки в качестве зависимости только для одного типа для уже типизированной библиотеки (так же, как googleapis использует типы из google-auth-library под капотом, линтер проекта требует, чтобы я перечислил ее как зависимость проекта, что я бы не стал 'не будет sh пока делать). Есть ли другой способ go об этом, пожалуйста.

Спасибо.

1 Ответ

0 голосов
/ 30 мая 2020

Я решил, что просто отключил предупреждение eslint для no-extraneous-dependencies.

// eslint-disable-next-line import/no-extraneous-dependencies
import { OAuth2Client } from 'google-auth-library';
import { google } from 'googleapis';

Я не мог специально указать google-auth-library в качестве зависимости проекта, просто чтобы выбрать один тип, но под капотом пакет googleapis также импортировал типы для того же пакета. Так что, думаю, я бы ничего не сломал.

...