#typescript
Вопрос:
Я прочитал это содержимое из документов TS:
In TypeScript, just as in ECMAScript 2015, any file containing a top-level import or export is considered a module. Conversely, a file without any top-level import or export declarations is treated as a script whose contents are available in the global scope (and therefore to modules as well).
Я в замешательстве: что здесь означает «глобальный охват»?
Например: Если у меня есть 2 файла в одном каталоге: module.ts и global.ts. И функция add
определена в global.ts. Могу ли я вызвать функцию add
непосредственно в moudle.ts (без добавления импорта из global.ts)? Я попробовал это, но получил ошибку:
src/index.ts:2:11 - error TS2304: Cannot find name 'add'.
Ответ №1:
Модули имеют свою собственную область применения. Объявления верхнего уровня в модулях не являются глобальными объявлениями, как это было бы в немодульных сценариях.
<script>
let a = 1; // A global variable
</script>
<script type="module">
let b = 2; // A module-scope variable (not a global)
</script>
<script>
console.log(typeof a); // "number"
console.log(typeof b); // "undefined"
</script>
В сообщении говорится, что, поскольку у вас есть файл без import
или export
в нем, TypeScript рассматривает его как сценарий, не являющийся модулем, и оценивает его в глобальном масштабе.
Например: Если у меня есть 2 файла в одном каталоге: module.ts и global.ts. И функция
add
определена в global.ts. Могу ли я вызвать функциюadd
непосредственно в moudle.ts (без добавления импорта из global.ts)? Я попробовал это, но получил ошибку:
Да, если:
global.ts
уже выполнено, поэтому функция существует; и- TypeScript знает, что
add
это доступно в глобальном масштабе
Чтобы достичь #2 выше, вы должны объявить add
в глобальном пространстве имен в файле объявления или аналогичном.
Но я не рекомендую этого делать. Вместо этого создайте global.ts
модуль, экспортировав add
его или что-либо еще, что он предоставляет (и, возможно, изменив его имя), и импортируйте из него то, что вам нужно module.ts
.