Подтвердить что ты не робот

TypeScript - разница между импортом... и импортом {...} (с фигурными фигурными скобками)

Переходя от Java к TS, я опустил {...} вокруг импортированного типа.

import DiscriminatorMappingData from './DiscriminatorMappingData';

вместо

import {DiscriminatorMappingData} from './DiscriminatorMappingData';

См. TypeScript - сохранение класса в качестве значения карты?.

Я прочитал документацию и не очень понял. Я только взял от него, что, когда мне нужен только один тип из файла, я могу опустить {}.
Тем не менее, это вызвало странные ошибки, такие как "Неизвестное имя" или непредвиденные типы несовместимости.

Итак, какая разница, просто?

4b9b3361

Ответ 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.