在打字稿中我可以导入另一个模块\名称空间,如下所示:
namespace Shapes2 {
import shapes = Shapes;
var bar = new shapes.Bar();
}
但是,我可以直接轻松地引用命名空间。
namespace Shapes3{
var shapes = Shapes;
var bar = new shapes.Bar();
}
import
做了什么有用的事吗?
我想何时输入import
而不是var
?
答案 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
的更改不会反映在原始变量中。
可以找到一个很好的例子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)
另一种可以简化名称空间使用的方法是使用import q = x.y.z 为常用对象创建较短的名称。不要与用于加载模块的import x = require(" name")语法相混淆,此语法只是为指定的符号创建别名。您可以将这些类型的导入(通常称为别名)用于任何类型的标识符,包括从模块导入创建的对象。