Почему при импорте * из файла выполняется код? - PullRequest
0 голосов
/ 13 февраля 2020

Зачем ничего экспортировать из файла (или модуля), переименовать его и просто поместить переменную в область действия выполнить код?

// log.js
console.log('A message');
// index.js
import * as app from 'log.js';

app;

Результат: A message печатается, как и ожидалось. Но если вы закомментируете строку app:

// log.js
console.log('A message');
// index.js
import * as app from 'log.js';

// app;

Ничего не печатается. Что здесь происходит?

Есть пример, использующий кодыandbox: https://codesandbox.io/s/xenodochial-keldysh-j0sli

Обновление: Я не понял, что это была машинопись Пример, который я добавил к вопросу, я делал тест, используя машинопись и javascript: вот коды и поле для версии js: https://codesandbox.io/s/silly-oskar-0mo2o

1 Ответ

4 голосов
/ 13 февраля 2020

Это ожидаемое поведение Typescript. См. Почему импорт удаляется в моем emit? и этот поток на github Typescript.

В TypeScript предполагается, что импорт модуля не имеет побочных эффектов, поэтому он удаляет импорт модулей, которые не используются ни в одном выражении.

Без использования пространства имен app Typescript даже не пытается импортировать и запускать log.js, поскольку пространство имен не является ' t * где используется и , предполагается, что модуль не имеет побочных эффектов, поэтому нет смысла импортировать его.

Если вы делаете , хотите утверждать, что импорт должен иметь один побочные эффекты, используйте:

import 'log.ts';

В результате код верхнего уровня log.ts будет зарегистрирован, как и ожидалось.

Обратите внимание, что это поведение, специфичное для Typescript c. вне Typescript , код верхнего уровня модуля запускается всякий раз, когда модуль импортируется, независимо от того, что было импортировано или на которое ссылаются позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...