Каков наиболее совместимый способ импорта CommonJS из TypeScript? - PullRequest
0 голосов
/ 30 января 2019

Из этих трех способов импорта модуля CommonJS из TypeScript:

  1. import * as foo from "foo
  2. import foo = require("foo")
  3. const foo = require("foo")

Что наиболее совместимо со спецификациями TS и модуля ES?

То есть, когда / если библиотека "foo" переключается на использование модулей ES, что из перечисленного ниже наименее вероятнонарушить или или стать странным?

обновление: (1) выглядит лучше всего, поскольку это настоящий синтаксис модуля ES, но я обеспокоен сохранением предполагаемой семантики импортируемого модуля CommonJS.Например, если ожидается побочный эффект при импорте модуля, мы хотели бы сохранить эту семантику при использовании синтаксиса import * as.

Еще одно обновление: мы нацелены на модули ES.Отдельный инструмент выполняет модуль ES -> преобразование.

1 Ответ

0 голосов
/ 30 января 2019
const foo = require("foo")

Это худший вариант, foo будет напечатан как любой, я бы избегал его любой ценой

import foo = require("foo")

Это синтаксис импорта, специфичный для машинописного текста, и его снова следует избегатькак можно больше.Во время выполнения он компилируется в var foo = require("foo"), но во время компиляции обеспечивает безопасность типов.Это единственный способ импортировать модуль, использующий назначение экспорта.

import * as foo from "foo"

Это официальный синтаксис ES2015, и его следует использовать по возможности всякий раз (кроме случая назначения экспорта, я думаю, что он может использоваться во всехдругие случаи).

Если вы компилируете в commonjs, приведенный выше синтаксис все равно будет транслироваться как const foo = require("./foo"); во время выполнения, поэтому он должен вести себя таким же образом.

Существует одно предупреждение: машинопись не будет генерировать неиспользуемые импорта и импортировать, которые используются только для их типов (см. здесь ), поэтому, если вы хотите импортировать модуль для стороныэффекты, которые вы можете использовать этот синтаксис:

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