2016-08-02 273 views
26

从Java到TS,我省略了导入类型周围的{...}TypeScript - 导入...和导入{...}(带花括号)之间的区别

import DiscriminatorMappingData from './DiscriminatorMappingData'; 

代替

import {DiscriminatorMappingData} from './DiscriminatorMappingData'; 

TypeScript - storing a class as a map value?

我读过文档,并不太了解。我只是从中获得了,当我只需要一个文件类型时,我可以省略{}
但是,这造成了奇怪的错误,如“未知名称”或意外类型incompatibilites。

那么,有什么区别,简单地说呢?

回答

28

您的两个import声明之间的区别在TypeScript规范中。从第11.3.2节,Import Declarations

形式

import d from "mod";

的进口报关是完全等同于进口报关

import { default as d } from "mod";

因此,你会省略大括号只有当您导入作为模块的default实体导出的内容(使用export default声明时,其中每个模块只能有一个声明)。您在import声明中提供的名称将成为该导入实体的别名。

导入其他任何东西时,即使它只是一个实体,也需要提供大括号。

TypeScript手册的Default exports部分有几个示例。

1

这是destructruring格式的进口产品。从本质上分组我们想要导入的所有实体from定义文件。

如果您熟悉其他编程语言,您可能会熟悉解构概念。实际上destructuring作为es6的一部分以assignments的形式加入。

进口重组支持最初是在TypeScript中建议的this Github ticket中,但随后被分组在this ticket之下,它跟踪所有es6 modules

相关问题