Ответ 1
Прежде всего, чтобы вы немного успокоились, эмбиентные и глобальные типизации - одно и то же, это просто изменение имени, поскольку глобально лучше описывает их функцию
Что касается того, что они....
Глобальные декларации, использующие простейшее определение, - это идентификаторы, доступные в глобальном пространстве имен проектов.
"Внешний модуль" - это файл .d.ts с импортом или экспортом верхнего уровня. Внешние модули обернуты Typings в объявить модуль "...." , и после некоторой магии зависимостей вы получите объявления, которые не загрязняют глобальное пространство имен проектов.
Что касается того, почему это важно, вы можете столкнуться с конфликтами с версиями и/или дублирующими определениями.
Пакет A зависит от версии 1.4 зависимости X Пакет B зависит от версии 2.0 зависимости X
Если определения пакета A и пакета B являются глобальными, конфликт версий (разные определения одной и той же зависимости) заканчивается в глобальном пространстве имен и компилятор TypeScript взрывается.
Все сводится к тому, в какой области вы хотите, чтобы объявления типа были доступны.