TS中的命名空间

103 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情

命名空间

项目开发过程中,我们会发现我们的命名空间有严格规范,我们不能随意的去起名字,但是采用尽量标准化的方式去命名,我们又无法避免的会造成污染,TS提供了namespace避免这个问题出现

  • 在TS1.5之前被叫内部模块,主要用于组织代码,避免命名冲突
  • 本质就是定义一个大的对象,把变量、方法、类和接口都放在里面
  • 通过export 导出
  • 通过 namespace 定义
  1. 初次使用命名空
namespace A {
    export const a = 123
}

console.log(A.a)
  1. 命名空间嵌套使用,命名空间里的对外的都需要用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)
  1. 导入导出 创建一个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: '实则棒'
}