命名空间(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
模块
模块的基本介绍
模块是在自身的 作用域里执行,并不在全局作用域中,这意味着定义在模块里面的变量、函数、和类等在模块外并不可见
- 内部模块
-
声明模块
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");
}
}
- 模块调用 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"
// ]
}