Каков наиболее совместимый способ импорта CommonJS из TypeScript?
Из этих трех способов импорта модуля CommonJS из TypeScript:
import * as foo from "foo
import foo = require("foo")
const foo = require("foo")
Что наиболее совместимо со спецификациями TS и модуля ES?
То есть, когда / если библиотека "foo" переключается на использование модулей ES, что из вышеперечисленного наименее вероятно сломается или станет странным?
Обновление: (1) выглядит лучше, поскольку это настоящий синтаксис модуля ES, но я обеспокоен сохранением предполагаемой семантики импортируемого модуля CommonJS. Например, если ожидается побочный эффект при импорте модуля, мы хотели бы сохранить эту семантику при использовании
import * as
синтаксис.Еще одно обновление: мы нацелены на модули ES. Отдельным инструментом занимается ES Module -> преобразование.
1 ответ
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"