TypeScript - разница между импортом... и импортом {...} (с фигурными фигурными скобками)
Переходя от Java к TS, я опустил {...}
вокруг импортированного типа.
import DiscriminatorMappingData from './DiscriminatorMappingData';
вместо
import {DiscriminatorMappingData} from './DiscriminatorMappingData';
См. TypeScript - сохранение класса в качестве значения карты?.
Я прочитал документацию и не очень понял. Я только взял от него, что, когда мне нужен только один тип из файла, я могу опустить {}
.
Тем не менее, это вызвало странные ошибки, такие как "Неизвестное имя" или непредвиденные типы несовместимости.
Итак, какая разница, просто?
Ответы
Ответ 1
Разница между двумя объявлениями import
описана в спецификации TypeScript. Из §11.3.2, Декларации импорта:
Объявление импорта формы
import d from "mod";
в точности эквивалентен объявлению импорта
import { default as d } from "mod";
Таким образом, вы можете опустить фигурные скобки только при импорте того, что было экспортировано в качестве объекта default
модуля (с объявлением export default
, из которого может быть только один модуль). Имя, которое вы указываете в объявлении import
, становится псевдонимом для этого импортированного объекта.
При импорте чего-либо еще, даже если это всего лишь одна сущность, вам нужно предоставить фигурные скобки.
В разделе экспорта по умолчанию в справочнике TypeScript есть несколько примеров.
Ответ 2
Это импорт в формате destructruring
. По существу группировка всех объектов, которые мы хотим импортировать from
файл определения.
Если вы знакомы с другими языками программирования, вы можете быть знакомы с понятием деструктурирования. Фактически destructuring
был добавлен в виде присваивания как часть es6
.
Поддержка реструктуризации импорта была впервые предложена в TypeScript в этот билет Github, но затем была сгруппирована под этот билет, который отслеживал все es6 modules
.