【TypeScript】namespace 命名空间

在 TypeScript 中,命名空间(Namespace)是一种用于组织和管理代码的机制,它可以避免全局作用域下的命名冲突,并将相关的代码封装在一个命名空间内。

任何包含顶级import或者export的文件都被当成一个模块。相反地,如果一个文件不带有顶级的import或者export声明,那么它的内容被视为全局可见的。

以下是命名空间的基本用法和特点:

  1. 创建命名空间:

你可以使用 namespace 关键字来创建一个命名空间:

namespace MyNamespace {
  export const message = "Hello from MyNamespace";

  export function greet(name: string): string {
    return `Hello, ${name}!`;
  }
}
  1. 访问命名空间中的成员:

通过使用命名空间名称来访问其中的成员:

console.log(MyNamespace.message); // 输出:Hello from MyNamespace
console.log(MyNamespace.greet("Alice")); // 输出:Hello, Alice!
  1. 嵌套命名空间:

命名空间可以嵌套,以便更好地组织代码:

namespace OuterNamespace {
  export namespace InnerNamespace {
    export const value = 42;
  }
}

console.log(OuterNamespace.InnerNamespace.value); // 输出:42
  1. 使用 export 关键字:

在命名空间中,如果要在外部访问命名空间中的成员,需要使用 export 关键字进行导出。然后在外部文件中进行import {space2} from './index2.ts' 导入。此时会在index.js中用到define,需要在tsconfig.json 中将"module"改为CommonJS,才可以正常编译。

  1. 别名:
namespace A {
  export namespace B {
    export const c = 1
  }
}
// 以下方式不可以通过 ts-node 去编译,会报错
import AAA = A.B
console.log(AAA.c); // 1

  1. 合并命名空间:

interface 一样,多次声明同一个命名空间将会合并成一个:

namespace A {
  export const c = 1
}
namespace A {
  export const d = 2
}
  1. 使用 /// 三斜线指令:

在分散的文件中使用命名空间时,可以使用 /// 指令引入其他文件中的命名空间:(注意在使用三斜线指令时,tscofig中不能设置"moduleDetection": "force"

/// 

需要注意的是,在现代 TypeScript 中,命名空间的使用已经逐渐被模块化替代。模块化使用 importexport 关键字来管理代码,更加推荐用于组织项目的代码结构。

你可能感兴趣的:(TypeScript,typescript,ubuntu,javascript)