Я пытаюсь создать класс, который обрабатывает gmail для меня, проблема в том, что я хотел бы, чтобы машинописный текст имел смысл для указанного объекта. Однако это не дает мне набрать для объекта Google, который я пытаюсь создать в конструкторе:
class Gmail {
private auth: any;
google = null;
messageList: emailListType = ('' as unknown) as emailListType;
constructor(auth) {
this.google = google.gmail({ version: 'v1', auth: this.auth }).users;
}
async getEmailsInLabel(label: string) {
//@ts-ignore
this.messageList = await this.google.messages.list({
labelIds: [label],
userId: 'me',
});
}
}
Я также попытался go к определению типа этой функции, и нашел это :
import { AuthPlus } from 'googleapis-common';
import { gmail_v1 } from './v1';
export declare const VERSIONS: {
'v1': typeof gmail_v1.Gmail;
};
export declare function gmail(version: 'v1'): gmail_v1.Gmail;
export declare function gmail(options: gmail_v1.Options): gmail_v1.Gmail;
declare const auth: AuthPlus;
export { auth };
Кажется, что объект Google имеет тип gmail_v1.Gmail. Однако всякий раз, когда я пытаюсь импортировать, интерфейс машинного интерфейса gmail_v1.Gmail говорит, что я не могу импортировать из файлов d.ts.
Я также пробовал это:
class Gmail {
private auth: any;
google = google.gmail({ version: 'v1', auth: this.auth }).users;
messageList: emailListType = ('' as unknown) as emailListType;
constructor(auth) {
this.auth = auth;
}
async getEmailsInLabel(label: string) {
//@ts-ignore
this.messageList = await this.google.messages.list({
labelIds: [label],
userId: 'me',
});
}
}
работает для набора текста, но не запускает функцию, но ставит вопрос спорным, я также пытался переназначить свойство google внутри конструктора, делая равным выполнение функции google.gmail: не работает.
TLDR: Как установить тип свойства google в моем классе в соответствии с типом интерфейса gmail_v1.Gmail? Как получить интерфейс объекта из внешней библиотеки? Каковы лучшие практики для создания классов, подобных этому, чтобы конструктор передавал типы в свойства?