当前位置: 首页 > news >正文

TypeScript命名空间和模块

 🎬 岸边的风:个人主页

 🔥 个人专栏 :《 VUE 》 《 javaScript 》

⛺️ 生活的理想,就是为了理想的生活 !

在这里插入图片描述

目录

命名空间(Namespace)

命名空间(Namespace)使用场景

第三方库

兼容性

模块

3. 命名空间与模块的对比


命名空间(Namespace)

在 TypeScript 中,命名空间是一种将代码封装在一个特定名称下的方式,以防止全局作用域污染并避免命名冲突。命名空间在 TypeScript 中非常重要,因为它们为模块化和封装提供了灵活的选项。

创建命名空间的语法如下:

namespace MyNamespace {export const myVar: number = 10;export function myFunction(): void {console.log("Hello from MyNamespace");}
}

在此例中,我们创建了一个名为MyNamespace的命名空间,该命名空间内有一个变量myVar和一个函数myFunctionexport关键字允许我们从命名空间外部访问这些元素。

命名空间中的元素可以通过以下方式访问:

console.log(MyNamespace.myVar); // 输出:10
MyNamespace.myFunction(); // 输出:Hello from MyNamespace

我们也可以使用嵌套的命名空间:

namespace ParentNamespace {export namespace ChildNamespace {export const myVar: number = 20;}
}
console.log(ParentNamespace.ChildNamespace.myVar); // 输出:20

命名空间(Namespace)使用场景

在 TypeScript 的早期版本中,命名空间被广泛地使用来组织和包装一组相关的代码。然而,随着 ES6 模块系统(ES6 Modules)的出现和广泛使用,命名空间的用法变得越来越少,现在被视为一种遗留的方式来组织代码。

第三方库

一些第三方库仍然使用命名空间来组织自己的代码,并提供命名空间作为库的入口点。在这种情况下,我们需要使用命名空间来访问和使用库中的类型和函数。

namespace MyLibrary {export function myFunction() {// ...}
}MyLibrary.myFunction();

兼容性

在一些遗留的 JavaScript 代码或库中,命名空间仍然是一种常见的组织代码的方式。如果我们需要与这些代码进行交互,我们可能需要创建命名空间来适应它们。

// legacy.js
var MyNamespace = {myFunction: function() {// ...}
};MyNamespace.myFunction();

在上面的示例中,我们演示了命名空间的几个使用场景。第一个示例展示了如何使用命名空间访问和使用第三方库的函数。第二个示例展示了如何使用命名空间来管理全局状态。第三个示例展示了如何在与遗留 JavaScript 代码进行交互时创建命名空间。

虽然在现代 TypeScript 开发中,模块是更常见和推荐的代码组织方式,但命名空间仍然在特定的情况下具有一定的用处,并且在与一些特定的库或代码进行交互时可能是必需的。

模块

在 TypeScript 中,模块是另一种组织代码的方式,但它们更关注的是依赖管理。每个模块都有其自己的作用域,并且只有明确地导出的部分才能在其他模块中访问。

创建和使用模块的方式如下:

myModule.ts文件中:

export const myVar: number = 10;
export function myFunction(): void {console.log("Hello from myModule");
}

在另一个文件中导入和使用模块:

import { myVar, myFunction } from './myModule';console.log(myVar); // 输出:10
myFunction(); // 输出:Hello from myModule

在 TypeScript 中,我们可以使用模块解析策略(如 Node 或 Classic),以确定如何查找模块。这些策略在 tsconfig.json 文件的 compilerOptions 选项下的 moduleResolution 选项中定义。

3. 命名空间与模块的对比

虽然命名空间和模块在某种程度上有所相似,但它们有以下几个关键区别:

  1. 作用域:命名空间是在全局作用域中定义的,而模块则在自己的作用域中定义。这意味着,在模块内部定义的所有内容默认情况下在模块外部是不可见的,除非显式地导出它们。

  2. 文件组织:命名空间通常用于组织在同一文件中的代码,而模块则是跨文件进行组织。

  3. 依赖管理:模块关注的是如何导入和导出功能,以便管理代码之间的依赖关系。相比之下,命名空间并未对依赖管理提供明确的支持。

  4. 使用场景:随着 ES6 模块语法的普及,现代 JavaScript 项目通常更倾向于使用模块来组织代码。然而,对于一些遗留项目或那些需要将多个文件合并为一个全局可用的库的场景,命名空间可能更为合适。

http://www.lryc.cn/news/165728.html

相关文章:

  • C++学习笔记--函数重载(1)
  • 交叉编译poco-1.9.2
  • C++中如何处理超长的数字(long long类型的整数都无法存储的)
  • RabbitMQ MQTT集群方案官方说明
  • 深圳唯创知音电子将参加IOTE 2023第二十届国际物联网展•深圳站
  • 《TCP/IP网络编程》阅读笔记--I/O复用
  • [C#] 允许当前应用程序通过防火墙
  • 帆软FineReport决策报表Tab实现方案
  • 只打印文名
  • 【经典小练习】JavaSE—拷贝文件夹
  • FPGA-结合协议时序实现UART收发器(六):仿真模块SIM_uart_drive_TB
  • Spring Boot集成EasyExcel实现数据导出
  • EasyExcel3.0读(日期、数字或者自定义格式转换)
  • 浅谈C++|STL之vector篇
  • 微信、支付宝修改步数【小米运动】
  • stu02-初识HTML
  • 软件测试7大误区
  • 【深度学习】 Python 和 NumPy 系列教程(十二):NumPy详解:4、数组广播;5、排序操作
  • CSS宽度问题
  • 浅谈C++|STL之string篇
  • Kubernetes Dashboard安装部署
  • 在Qt的点云显示窗口中添加坐标轴C++
  • [密码学入门]凯撒密码(Caesar Cipher)
  • uboot 顶层Makefile-make xxx_deconfig过程说明三
  • c++中的多线程通信
  • IO day7
  • C语言之指针进阶篇(3)
  • SQL7 查找年龄大于24岁的用户信息
  • vite搭建vue3项目
  • Qt中表格属性相关操作,调整表格宽度高度自适应内容等