Я пытаюсь использовать API Google для браузера из TypeScript; насколько я могу судить, они недоступны как модули ES и могут быть загружены только как тег <script>
.
Если я установлю @types/gapi
, существует объявление пространства имен gapi
, которое автоматически виден из всего моего кода TypeScript. Однако я асинхронно загружаю и мой код, и тег <script>
API Google, и хочу убедиться, что мой код не пытается использовать gapi
до загрузки скрипта API Google и добавления его в глобальное пространство имен .
Некоторые вещи, которые я пробовал:
- Добавление
declare type gapi = undefined
или declare var gapi: undefined
в lib.d.ts
, в надежде, что результирующий тип будет {<existing namespace>} | undefined
, Первый не изменился, последний вызвал ошибку, что gapi
уже было объявлено. - Остановка TypeScript от неявного импорта определения типа путем добавления
"types": []
к моему compilerOptions
, а затем выполнения import type gapi_ from 'gapi'
в отдельный модуль, затем пытается определить тип, который является объединением этого и undefined
, который я могу импортировать в другом месте. Когда я это делаю, он жалуется, что File '.../node_modules/@types/gapi/index.d.ts' is not a module. ts(2306)
- Делает вышеизложенное, но с
/// <reference types="gapi" />
. Кажется, что если это где-нибудь в моем проекте, пространство имен gapi
будет видно везде в моем проекте.
Есть ли способ, которым я может либо: а) расширить пространство имен gapi
, чтобы оно находилось в объединении с undefined
, б) импортировать его из некоторого моего кода без его глобальной видимости, либо c) получить TypeScript для проверить, что я проверяю наличие пространства имен, прежде чем использовать его каким-либо другим способом?