为什么import关键字有用

Why is the import keyword useful?

本文关键字:有用 关键字 import 为什么      更新时间:2023-09-26

在typescript中,我可以导入另一个模块''命名空间,如下所示:

namespace Shapes2 {
    import shapes = Shapes;
    var bar = new shapes.Bar();
}

然而,我可以很容易地直接引用命名空间。

namespace Shapes3{
    var shapes = Shapes;
    var bar = new shapes.Bar();
}

import做了什么有用的事情吗?

我想什么时候键入import而不是var

在这种特定情况下,不,它没有做任何有用的事情。该语法用于为命名空间创建别名。你的例子在这种情况下会更有用:

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的更改不会反映在原始变量中。

这方面的一个很好的例子可以在规范中找到:

namespace A {  
    export interface X { s: string }  
}
namespace B {  
    var A = 1;  
    import Y = A;  
}

"Y"是未实例化命名空间"a"的本地别名。如果"A"的声明被更改,使得"A"成为实例化的命名空间,例如通过在"A"中包含变量声明,则上面"B"中的import语句将是错误的,因为表达式"A"没有引用命名空间"A"。

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

来自TypeScript手册

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