2016-08-02 104 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

相關問題