почему объявление не может использоваться вместе с изолированными модулями в машинописном тексте?

Объявление используется для создания файла типа, а изолированные модули - все файлы должны быть отдельным модулем. Почему эти два варианта используются вместе?

error TS5053: Option 'declaration' cannot be specified with option 'isolatedModules'.

Ответ 1

Ответ

На вопрос, на который ссылался Макс Хейбер в комментариях, Уэсли Вигхам из команды TypeScript опубликовал следующий ответ (выделение добавлено):

Причина по той же причине, по которой вы не можете использовать константы в изолированных модулях: информация о типе. Поскольку изолированные модули компилируют каждый файл по отдельности без типов файлов, от которых он зависит, любой предполагаемый тип, который мы будем записывать в файл декларации, потенциально будет неправильным, поскольку при их расчете будет отсутствовать информация из остальной части компиляции. Существует ограниченное подмножество объявлений emit, где в вывод не выводятся типы, которые, однако, могут поддерживаться.

Другими словами, isolatedModules *.d.ts не предоставляют достаточно информации о типе для создания полных и точных *.d.ts объявлений *.d.ts.

Предлагаемый обходной путь

Комментарии к проблеме также имеют предложенный обходной путь, в котором у нас есть один tsconfig для компиляции с изолированными модулями и второй tsconfig для создания файлов объявлений.

tsconfig.json

{
    "compilerOptions": {
        "incremental": true,
        "isolatedModules": true
    }
}

TSconfig-для-declarations.json

{
    "extends": "./tsconfig",
    "compilerOptions": {
        "emitDeclarationOnly": true,
        "isolatedModules": false,
        "declaration": true
    }
}