Как я могу заставить TypeScript обеспечить, чтобы я проверял наличие глобально объявленного пространства имен во время выполнения? - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь использовать 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 для проверить, что я проверяю наличие пространства имен, прежде чем использовать его каким-либо другим способом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...