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"