开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情
命名空间
项目开发过程中,我们会发现我们的命名空间有严格规范,我们不能随意的去起名字,但是采用尽量标准化的方式去命名,我们又无法避免的会造成污染,TS提供了namespace避免这个问题出现
- 在TS1.5之前被叫内部模块,主要用于组织代码,避免命名冲突
- 本质就是定义一个大的对象,把变量、方法、类和接口都放在里面
- 通过export 导出
- 通过 namespace 定义
- 初次使用命名空
namespace A {
export const a = 123
}
console.log(A.a)
- 命名空间嵌套使用,命名空间里的对外的都需要用export导出,下面代码可以正确读取A.B.a为456,A.a为123
namespace A {
export const a = 123
export namespace B {
export const a = 456;
}
}
console.log(A.B.a)
console.log(A.a)
- 导入导出 创建一个test.ts,在里面定义一个命名空间,然后导出
export namespace A {
export const a = 123
export namespace B {
export const a = 456;
}
}
在inde.ts中用import导入test.ts导出的命名空间,然后尝试读取里面内容,这是ok的,命名空间和普通变量几乎是没有区别的
import { A } from "./test";
console.log(A.B.a)
三斜杠语法
三斜杠指令包含单个XML标签的单行主食,注释的内容为编译器指令使用 如果一个命名空间再一个单独的TypeScript文件中,就最应使用 /// 三斜杠引用他,语法格式如下: ///
例子: 创建一个test.ts,此命名空间无需export
namespace UserInfo {
export interface IName{
name:string
}
}
在index.ts中导入,在里面可以正常使用,代码无报错,所以使用reference标签导入,就和在html使用script导入js脚本一样,导入的一坨代码在运行时就是在这有一坨代码一样
/// <reference path="./test.ts" />
let a: UserInfo.IName = {
name: '实则棒'
}