typescript 基础(五)(命名空间/模块)

501 阅读2分钟

命名空间(namespace)定义了标识符的可见范围,一个标识符可以在多个名字空间中定义,在不同的空间中的含义互不相干,这个样,在一个新的名字空间中可以定义任何标识符,不会与任何已有的标识符发生冲突,因为已有的定义都处于其他空间中。命名空间一个最明确的目的就是解决重名问题。

定义命名空间和导入命名空间

/// :导入命名空间,约等于python中的import? 一般在项目中不用导入三斜线 App.ts:

 namespace App {
     //变量
     export var username:string = "App的变量";
     //常量
     export const NAME = ”App命名空间的常量“;
     // 函数
    export function func(){
        return "App命名空间里面的func"
    }
    // 类
    export class Human{
    age:number = 13;

    }
    console.log("hello!")
    // 当然,在当前命名空间下也是可以执行代码的    
 }

main.ts:

/// <reference path="App.ts" />
console.log(App.NAME);
console.log(App.Human);
var xm = new App.Human();
console.log(xm.age)

终端: tsc --out main.js main.ts

模块

模块的基本介绍

模块是在自身的 作用域里执行,并不在全局作用域中,这意味着定义在模块里面的变量、函数、和类等在模块外并不可见

  • 内部模块
  1. 声明模块

    App.ts

module App{
    export var username:string = "App模块下的变量";
    export const WEB_URL = 'http://www.baidu.com';
    export class Human{
        desc(){
            console.log("hello");
        }
    }
    export function func(){
        console.log("hello");
    }
}
  1. 模块调用 main.ts
/// <reference path="App.ts" />
console.log(new App.Human());
console.log(App.username);
console.log(App.WEB_URL);

终端:

tsc --out main.js main.ts
  • 外部模块
    • 需要在第三方框架中才可以使用 Out.ts,代码:
class Humen{
    uname:string;
    constructor(uname){
        this.uname = uname;
    }
    desc() {
        return `您好,我叫 ${this.uname}`;
    }
}
export { Humen };
export { Humen as People };

导入模块,main.ts,代码:

import { Humen, People } from "./Out";

let obj1 = new Humen("小白");
let obj2 = new People("小黑");
obj1.desc();
obj2.desc();

编译命令:

tsc --module es6 main.ts   # --module 表示代码中编写模块的规范和标准

编译配置文件(外部模块的配置)

基于typescript开发的项目根目录,一般都会存在一个文件,叫tsconfig。这是typescript的编译配置文件。

配置选项:www.tslang.cn/docs/handbo…

tsconfig.json,常用配置项说明,代码:

// 当前配置文件名必须固定是: tsconfig.json
// 同时,json文件中不能出现注释的,所以此处的注释仅仅是为了学习,开发中决不能有
{
    "compilerOptions": {
        "module": "system",     // 项目中编写模块的规范标准
        "noImplicitAny": true,  // 表达式或声明上有隐含的 any类型时报错
        "removeComments": true, // 删除所有注释,除了以 /!*开头的版权信息。
        "preserveConstEnums": true,  // 保留const和Enums声明
        "outDir": "script",  // 编译结果保存目录
        // "outFile": "../../built/local/tsc.js",  // 编译以后输出的文件,一般用不上
        "sourceMap": true,  // 生成相应的 .map文件
        "experimentalDecorators": true,  // 启用实验性的ES装饰器
        "lib": [ // 编译过程中需要引入的库文件的列表
            "es5",
            "dom",
            "es2015.promise"
        ]
    },
    "files": [   // 指定要编译的文件列表, 与include和exclude冲突,开发中,一般使用exclude
      "main.ts"
    ]
  //    "include": [ // 指定要编译的文件所在目录
////        "src/**/*",
//        "./"
//    ],
//    "exclude": [ // 指定在编译时排除的文件目录
//        "node_modules",
//        "**/*.spec.ts"
//    ]
}