📜  TypeScript模块

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

TypeScript模块

JavaScript具有ECMAScript 2015中的模块概念。 TypeScript具有模块的这一概念。

模块是一种创建一组相关变量,函数,类和接口等的方法。它在本地范围而不是全局范围内执行。换句话说,在模块中声明的变量,函数,类和接口不能直接在模块外部访问。我们可以使用export关键字创建一个模块,也可以通过使用import关键字在其他模块中使用。

模块通过使用模块加载器导入另一个模块。在运行时,模块加载程序负责在执行模块之前查找并执行模块的所有依赖关系。 JavaScript中最常用的模块加载器是Node.js的CommonJS模块加载器,Web应用程序的require.js。

我们可以将模块分为两大类:

  • 内部模块
  • 外部模块

内部模块

内部模块在Typescript的早期版本中。它用于将类,接口,函数,变量进行逻辑分组到单个单元中,并且可以导出到另一个模块中。在最新版本的TypeScript中,模块被命名为命名空间。所以今天,内部模块已经过时了。但是通过在内部模块上使用名称空间仍然支持它们。

早期版本中的内部模块语法:

module Sum { 
   export function add(a, b) {  
      console.log("Sum: " +(a+b)); 
   } 
}

ECMAScript 2015的内部模块语法:

namespace Sum { 
   export function add(a, b) { 
      console.log("Sum: " +(a+b));
   } 
}

外部模块

外部模块也称为模块。当应用程序包含数百个文件时,如果没有模块化方法,几乎不可能处理这些文件。外部模块用于指定多个外部js文件之间的负载依赖性。如果应用程序只有一个js文件,则外部模块不相关。 ECMAScript 2015(ES6)模块系统将每个文件视为一个模块。

模块声明

我们可以使用export关键字声明一个模块。模块声明的语法如下。

//FileName : EmployeeInterface.ts 
export interface Employee { 
   //code declarations 
}

我们可以通过使用import关键字在其他文件中使用clarify模块,如下所示。指定的文件/模块名称不带扩展名

import { class/interface name } from 'module_name';

让我们通过以下示例了解模块。

模块创建: additional.ts

export class Addition{
    constructor(private x?: number, private y?: number){
    }
    Sum(){
        console.log("SUM: " +(this.x + this.y));
    }
}

通过使用import关键字app.ts访问另一个文件中的模块

import {Addition} from './addition';

let addObject = new Addition(10, 20); 

addObject.Sum();

编译和执行模块

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

$ tsc --module commonjs app.ts
$ node ./app.js

输出:

Sum: 30

在单个文件中导入多个模块

我们可以在一个文件中定义多个模块。下面给出了多模块声明的语法。

import { export_name1, export_name2 } from 'module_name';

让我们通过以下示例了解模块。

模块创建: Modules.ts

export class Addition{
    constructor(private x?: number, private y?: number){
    }
    Sum(){
        console.log("SUM: " +(this.x + this.y));
    }
}
export class Substraction{
    constructor(private a?: number, private b?: number){
    }
    Substract(){
        console.log("SUBSTRACTION: " +(this.a - this.b));
    }
}

通过使用import关键字app.ts访问另一个文件中的模块

import  {Addition, Substraction} from './Modules';

let addObject = new Addition(10, 20); 
let subObject = new Substraction(20, 10);

addObject.Sum();
subObject.Substract();

编译和执行多个模块

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

$ tsc --module commonjs app.ts
$ node ./app.js

输出:

SUM: 30
SUBTRACTION: 10

再出口

在TypeScript中,模块有时会扩展其他模块,并部分暴露其某些功能。重新导出不会将其导入本地或引入局部变量。在这种情况下,我们可以使用其原始名称或将其重命名来重新导出其某些功能。

让我们通过以下示例了解模块的重新导出概念。

模块创建: Modules.ts

export class Addition{
    constructor(private x?: number, private y?: number){
    }
    Sum(){
        console.log("SUM: " +(this.x + this.y));
    }
}

创建重新导出模块: re-exports.ts

// Re-exporting types Addition as plus from Modules file
export { Addition as plus } from "./Modules";

在下面的例子中,添加出口类的名称被改变为使用{添加作为加}。重新导出有助于为导出分配更有意义的名称,从而增加程序的可读性。

通过使用import关键字app.ts访问另一个文件中的模块

//importing the exporting types from re-exports file
import {plus as Addition} from './re-exports';  //importing plus as Addition

let addObject = new Addition(10, 20); 

addObject.Sum();

编译和执行模块

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

$ tsc --module commonjs app.ts
$ node ./app.js

输出:

Sum: 30