Я заметил, что многие файлы декларации об окружающей среде declare
a namespace
и a module
, который просто экспортирует пространство имен, как правило, используя некоторую гимнастику, которую я действительно не понимаю. Например, в react.d.ts
вы видите это:Почему объявления ambient используют пространство имен и модуль?
declare namespace __React {
... entire API of the react library ...
}
declare module "react" {
export = __React;
}
- Почему одновременно
namespace
иmodule
? Почему бы просто не объявить модуль с библиотечным API внутри него? - Почему пространство имен называется
__React
, а не простоReact
? Это похоже на довольно неудобное имя «не используй меня», но IntelliJ IDEA импортировал все это по всему исходному коду и, похоже, работает.
Спасибо, это было действительно ясное объяснение, и все это имеет смысл сейчас! Что интересно (раздражает), так это то, что IntelliJ IDEA всегда хочет «импортировать Component = __React.Component' вместо' import {Component} из «реагировать», даже если я использую 'module: commonjs'. Для интерфейсов, таких как 'import MouseEventHandler = _React.MouseEventHandler', он работает, я думаю, потому что интерфейс не является ссылочным символом в скомпилированном JS, но для других вещей я получаю' Can not find variable: __React'. Думаю, IDE может быть немного умнее здесь. – Aaron