为什么import关键字有用?

时间:2016-04-18 20:20:47

标签: javascript typescript

在打字稿中我可以导入另一个模块\名称空间,如下所示:

namespace Shapes2 {
    import shapes = Shapes;

    var bar = new shapes.Bar();
}

但是,我可以直接轻松地引用命名空间。

namespace Shapes3{
    var shapes = Shapes;

    var bar = new shapes.Bar();
}

import做了什么有用的事吗?

我想何时输入import而不是var

2 个答案:

答案 0 :(得分:5)

在那个特定的情况下,不,它没有做任何有用的事情。名称空间为That syntax is for creating aliases。在这种情况下,你的例子会更有用:

namespace Shapes2 {
  import Rects = Shapes.Rectangles;

  var bar = new Rects.Red();
  // Instead of `var bar = new Shapes.Rectangles.Red()`
}

基本上,这只是减少你打字数量的一种方式。在某种程度上,它是C#中using的替代品。但这与var有什么不同?

  

这与使用var类似,但也适用于导入符号的类型和名称空间含义。重要的是,对于值,import是与原始符号不同的引用,因此对别名var的更改不会反映在原始变量中。

source

可以找到一个很好的例子in the spec:

namespace A {  
    export interface X { s: string }  
}

namespace B {  
    var A = 1;  
    import Y = A;  
}
  

'Y'是非实例化名称空间“A”的本地别名。如果更改'A'的声明使得'A'成为实例化的命名空间,例如通过在'A'中包含变量声明,则上面'B'中的import语句将是一个错误,因为表达式'A'不是引用命名空间“A”的命名空间实例。

     

当import语句包含export修饰符时,将导出本地别名的所有含义。

答案 1 :(得分:0)

来自TypeScript Handbook

  

另一种可以简化名称空间使用的方法是使用import q = x.y.z 为常用对象创建较短的名称。不要与用于加载模块的import x = require(" name")语法相混淆,此语法只是为指定的符号创建别名。您可以将这些类型的导入(通常称为别名)用于任何类型的标识符,包括从模块导入创建的对象。