Q1: import … = require(…)
против const … = require(…)
Во время выполнения (или после компиляции кода) различий между двумя синтаксисами нет, первый преобразуется во второй.
С import
:
import x = require('x')
Этот синтаксис специфичен для TypeScript.Константа x
имеет тип, заданный некоторой типизацией, определенной в импортированном пакете или в пакете @types/x
.
С const
:
const x = require('x')
Это допустимый синтаксисв JavaScript и, конечно, в TypeScript.В TypeScript константа x
имеет тип any
.
Q2: import … from …
против import … = require(…)
Как насчет разницы между import x from 'x'
и import x = require('x')
Синтаксис import … from …
соответствует стандарту ES6.Я предлагаю прочитать это введение в модули ES6 и как их импортировать и экспортировать.
Но, короче говоря, синтаксис import x from 'x'
эквивалентен:
import x = require('x').default
(Обратите внимание на .default
член.)
Как преобразовать import … = require(…)
в синтаксис ES6
Стандарт ES6 гласит, что все экспортируемые элементы могут быть импортированыв один «объектный модуль пространства имен» .
Тогда ближайший стандартный синтаксис import x = require('x')
:
import * as x from 'x'
Этот синтаксис в настоящее время хорошо работает с транспиляцией TypeScriptпотому что код преобразуется в const … = require(…)
.
Однако: Этот синтаксис должен использоваться только в контексте, определенном стандартом.Потому что, когда ваш код будет использовать собственную версию модулей ES6, , вы не сможете импортировать функцию или класс таким образом .