📜  TypeScript命名空间

📅  最后修改于: 2021-01-11 12:48:26             🧑  作者: Mango

TypeScript命名空间

名称空间是一种用于功能逻辑分组的方法。它封装了具有共同关系的要素和对象。它使我们能够以更简洁的方式组织代码。

命名空间也称为内部模块。命名空间还可以包括接口,类,函数和变量,以支持一组相关功能。

与JavaScript不同,名称空间内置在TypeScript中。在JavaScript中,变量声明进入全局范围。如果在同一项目中使用了多个JavaScript文件,则有可能通过用相似的名称覆盖新用户而使新用户感到困惑。因此,使用TypeScript名称空间可以消除命名冲突

注意:一个名称空间可以跨越多个文件,并允许使用“ -outFile”连接每个文件,因为它们都是在一个位置定义的。它使代码更易于维护。

命名空间声明

我们可以通过使用namespace关键字后跟namespace_name来创建命名空间。可以使用export关键字在大括号{}中定义所有接口,类,函数和变量。 export关键字使每个组件都可以在名称空间之外访问。我们可以如下声明名称空间。

namespace  {
               export interface I1 { }
               export class c1{ }
}

要访问另一个名称空间中的接口,类,函数和变量,我们可以使用以下语法。

namespaceName.className;
namespaceName.functionName;

如果名称空间在单独的TypeScript文件中,则必须使用三斜杠(///)引用语法对其进行引用。

/// < reference path = "Namespace_FileName.ts" />

以下程序可帮助我们了解名称空间的使用。

创建项目并声明文件

名称空间文件: studentCalc

namespace studentCalc{
    export function AnualFeeCalc(feeAmount: number, term: number){
    return feeAmount * term;
    }
}

主文件: app.ts

/// 

let TotalFee = studentCalc.AnualFeeCalc(1500, 4);

console.log("Output: " +TotalFee);

编译和执行命名空间

打开终端,然后转到存储项目的位置。然后,键入以下命令。

$ tsc --target es6 app.ts
$ node app.js

我们将在下面看到输出: StudentCalc未定义。

因此,编译执行上述代码的正确方法是,我们需要在终端窗口中使用以下命令。

$ tsc --target es6 app.ts --outfile out.js
$ node ./out.js

现在,我们可以看到以下输出。

嵌套命名空间

命名空间还允许我们将一个命名空间定义为另一命名空间。我们可以使用dot(。)运算符访问嵌套名称空间的成员。以下示例有助于我们更清楚地了解嵌套名称空间。

嵌套的NameSpace文件: StoreCalc

namespace invoiceCalc { 
   export namespace invoiceAccount { 
      export class Invoice { 
         public calculateDiscount(price: number) { 
            return price * .60; 
         } 
      } 
   } 
}

主文件: app.ts

/// 

let invoice = new invoiceCalc.invoiceAccount.Invoice(); 

console.log("Output: " +invoice.calculateDiscount(400));

现在,使用以下命令编译执行以上代码。

$ tsc --target es6 app.ts --outfile out.js
$ node ./out.js

它产生以下输出。

Output: 240