2016-08-02 3 views
26

Начиная с Java до TS, я опустил {...} вокруг импортированного типа.TypeScript - разница между импортом ... и импортом {...} (с фигурными фигурными скобками)

import DiscriminatorMappingData from './DiscriminatorMappingData'; 

вместо

import {DiscriminatorMappingData} from './DiscriminatorMappingData'; 

См TypeScript - storing a class as a map value?.

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

Итак, в чем разница, просто?

ответ

28

Различия между вашими объявлениями import описаны в спецификации TypeScript. Из §11.3.2, Import Declarations:

Декларация импорта формы

import d from "mod";

в точности эквивалентно импортной декларации

import { default as d } from "mod";

Таким образом, вы будет опускать фигурные скобки только, когда вы импортируете то, что было экспортировано в качестве объекта default модуля (с объявлением export default, из которого может быть только один модуль). Имя, которое вы указываете в объявлении import, становится псевдонимом для этого импортированного объекта.

При импорте чего-либо еще, даже если это всего лишь одно сущность, вам необходимо предоставить фигурные скобки.

В разделе руководства по использованию TypeScript имеется несколько примеров.

1

Это импорт в формате destructruring. По существу группировка всех объектов, которые мы хотим импортировать, from файл определения.

Если вы знакомы с другими языками программирования, вы можете быть знакомы с понятием деструктурирования. Фактически destructuring был добавлен в форме assignments как часть es6.

Поддержка реструктуризации импорта была впервые предложена в TypeScript в this Github ticket, но затем была сгруппирована под this ticket, которая отслеживала все es6 modules.