«.d.ts — типы без реализации: так TypeScript понимает JavaScript, исходники которого недоступны — global из script tag или нетипизированный npm-пакет. Ключевое слово — declare; я воспринимаю это как обещание, которое компилятор не проверяет, поэтому предпочитаю библиотеки с declaration: true, а не отдельный файл, который дрейфует. Два правила держу в голове: файл — module только при top-level import/export, иначе декларации global — отсюда большинство «почему не применяется»; augmentation идёт через interface merging, можно переоткрыть Request у Express и добавить user, но нельзя расширить то, что библиотека отдала как type alias. Для по-настоящему безтиповых модулей пишу реальную форму, а не голый declare module, который превращает всё в any.»