TypeScript 中命名空间与模块的理解及区别

news2024/10/12 11:16:38

文章目录

    • 一、模块(Modules)
      • 示例
    • 二、命名空间(Namespaces)
      • 示例
    • 三、区别

在这里插入图片描述

一、模块(Modules)

在 TypeScript 中,任何包含顶级 importexport 声明的文件都被视为一个模块。模块的特点是它有自己的作用域,这意味着模块内的变量、函数、类等都是局部于该模块的,不会影响到全局作用域。

示例

假设我们有一个 1.ts 文件,定义了一个变量 a

const a = 1;

如果我们没有使用模块系统,而是在另一个文件中也声明了 a,TypeScript 编译器会报错,提示变量重复声明。
要解决这个问题,我们可以使用 exportimport 来引入模块系统:

const a = 10;
export default a;

在 TypeScript 中,export 关键字可以用来导出变量、函数、类或类型别名,其用法与 ES6 模块相同:

export const a = 1;
export type Person = {
  name: string;
};

我们可以通过 import 语句来导入这些模块:

import { a, Person } from './export';

二、命名空间(Namespaces)

命名空间是 TypeScript 中的一个组织代码的方式,主要用于解决全局作用域下的命名冲突问题。通过命名空间,我们可以将相关的代码组织在一起,并且避免了全局污染。

示例

在 TypeScript 中,我们使用 namespace 关键字来定义命名空间:

namespace SomeNamespace {
  export interface ISomeInterface { /* ... */ }
  export class SomeClass { /* ... */ }
}

要在外部访问命名空间内的类和接口,我们需要在它们前面加上 export 关键字:

SomeNamespace.SomeClass;

命名空间在编译后的 JavaScript 中实际上是一个立即执行函数表达式(IIFE),它将相关的变量和函数组织在一个对象中:

var SomeNamespace;
(function (SomeNamespace) {
    SomeNamespace.a = 1;
    // ...
})(SomeNamespace || (SomeNamespace = {}));

三、区别

  • 命名空间
    • 是一个全局对象,它通过一个名称来组织代码,以避免命名冲突。
    • 在大型项目中可能导致全局命名空间污染,难以识别组件间的依赖关系。
    • 通常用于通过 .d.ts 文件为 JavaScript 库定义类型。
  • 模块
    • 可以包含代码和声明,并且可以声明其依赖关系。
    • 模块内的代码具有局部作用域,不会污染全局作用域。
    • 在 TypeScript 中是组织代码的首选方式,尤其是在大型应用中。
      总结来说,模块是 TypeScript 中组织代码的首选方式,因为它提供了更好的封装和复用性。命名空间虽然仍然可用,但在新的 TypeScript 项目中通常不推荐使用,除非是在定义 JavaScript 库的类型时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2207810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

未来的电影:人机环境生态系统智能

本文摘自《影视产业研究》2024年10月创刊号 摘要: 随着人工智能的快速发展,未来的电影得到了广泛关注。通过对未来电影相关研究提供了一种将人机环境系统智能与影游结合的方式来解决未来电影的瓶颈问题,并从态势感知相关研究角度进行了研究。鉴于此&…

阿里云等联合编写的《2024大模型典型示范应用案例集》(附PDF分享)

这份大模型案例集资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】 2024 年是大模型深入赋能千行百业,融入实体经济,助力科技创新的一年。截至今年5月,我国国产大模型的数量已经超过…

taozige/基于Java语言的充电桩平台+充电桩系统+充电桩管理系统+充电桩系统源码+充电桩管理后台+充电桩小程序

简述 SpringBoot 框架,充电桩平台充电桩系统充电平台充电桩互联互通协议云快充协议1.5新能源汽车电动自行车公交车-四轮车充电充电源代码充电平台源码Java源码无加密项目 介绍 云快充协议云快充1.5协议云快充协议开源代码云快充底层协议云快充桩直连桩直连协议充…

Python人脸识别实战——基于Dlib和OpenCV的人脸识别与关键点检测(附完整代码和结果图)

Python人脸识别实战——基于Dlib和OpenCV的人脸识别与关键点检测(附完整代码和结果图) 关于作者 作者:小白熊 作者简介:精通python、matlab、c#语言,擅长机器学习,深度学习,机器视觉&#xff0…

基于FPGA的以太网设计(一)

以太网简介 以太网(Ethernet)是一种计算机局域网技术。IEEE组织的IEEE 802.3标准制定了以太网的技术标准,它规定了包括物理层的连线、电子信号和介质访问控制的内容。以太网是目前应用最普遍的局域网技术,取代了其他局域网标准如…

在线深度学习:爱奇艺效果广告分钟级模型优化

01# 背景 在效果广告投放场景中,媒体侧需要准确衡量每次请求的价值,模型预估值在广告竞价中扮演着核心角色。模型预估精度的提升,是改善媒体侧变现效率、提升广告收益的核心技术驱动力。 此前,爱奇艺效果广告预估模型为小时级模型…

爬虫设计思考之二

“所谓爬虫,其本质是一种计算机程序,它的行为看起来就像是蜘蛛在网上面爬行一样,顺着互联网这个“网”,一条线一条线地“爬行”。 一、认识爬虫 爬虫这个词对于非专业人士比较的陌生,但是实际却和我们的生活息息相关。例如我们国内经常使用的百度浏览器搜索&#x…

Qt-系统处理鼠标相关事件(57)

目录 使用 按下事件 释放事件 双击事件 移动事件 滚轮事件 使用 按下事件 实现下面的功能 鼠标在此处点击,就可以获取鼠标位置 添加函数 提升函数 手册中找到这个函数的原型 重写该函数 定义 重写 这里有一个细节需要注意,因为这里的标准点击…

单服务器基于 Nginx 负载均衡 + Docker Compose 提高并发量

背景信息 开发需求 单服务器的多服务管理 多服务器的集群管理可参考博主 docker swarm 的技术分享《基于 docker swarm 和 NVIDIA MIG 部署并行 AI 推理服务》 根据服务请求量和服务器规模的匹配程度,多服务器集群的性能对于目前来说过剩,故有了本研究的…

c#-出现类型初始值设定项引发异常的解决方案

当出现该问题时,通常摸不着头脑,无法定位到该问题所在行。 我们可以找到应发异常的类,例如我上面类为YY_Model.DefaultConfig。 打开这个类文件,加一个断点,一行行运行,到哪里突然跳出该文件,则…

Python脚本实现发送QQ邮件

需要发件人邮箱地址、授权码和收件人邮箱地址 1、登录QQ邮箱后台,点击右上角设置,下拉找到第三方服务,开启SMTP服务,复制生成的授权码 2、新建一个python文件,输入以下源码,更替参数后运行即可 import smt…

【计算机网络 - 基础问题】每日 3 题(三十六)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…

无缝数据流动:跨域数据交换的高效策略

大型企业为了业务拓展需要,会在全国乃至全球各地设立分公司和办事机构,以便更好地处理当地事务,并进行市场的开拓和客户维护,因此大型企业都会面临跨域数据交换的场景。 跨域数据交换时,需要考虑多方面的问题&#xff…

使用机器学习边缘设备的快速目标检测

论文标题:Fast Object Detection with a Machine Learning Edge Device 中文标题:使用机器学习边缘设备的快速目标检测 作者信息: Richard C. Rodriguez, MSDA Information Systems and Cyber Security Department, The University of Tex…

IEEE新晋“水刊”,非OA,2个月可录,毕业神刊比《IEEE Access》更保险!

本期解析:综合类 本期解析IEEE旗下的【综合类-仪器仪表】SCI 优点: 审稿速度快,快的2-4个月录用; 非OA,国人友好,录用率高; 缺点: 出版周期可能较长 期刊简介 IEEE Sensors Jou…

【Java】jvisualvm工具

jdk8及以下版本自带,在jdk的bin目录下,jvisualvm.exe jdk8以上去官网下载:https://visualvm.github.io/index.html 本地的会自动获取,发布在服务器上的用远程进行连接,发布的程序需配置JVM参数,如下 -Dcom…

Linux下的文件打包、压缩和解压缩

文章目录 打包、压缩、解压缩整体介绍数据压缩gzip示例压缩单个文件压缩多个文件保留原始文件并压缩递归压缩目录解压缩文件查看gz压缩文件的内容 bzip2示例压缩单个文件压缩多个文件压缩目录下的文件解压缩文件查看bz2压缩文件的内容 命令行选项总结 zip示例压缩文件解压缩文件…

vue3学习之插槽slot

关于slot web组件内部的占位符,可以使用自己的标记填充这个占位符 ,具名插槽就是在slot标签上添加name属性(https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/slot) vue3官方文档:https://cn.vuejs.org/gui…

微星主板安装系统进不去系统及bios办法

大部分原因是由于主板bios内部开启了 快速启动 选项导致的 可通过另外一个方式进入bios 1.打开控制面板--windows更新-高级启动-点立即重启 之后会进入疑难解答 ---高级----固件设置---点重启就会进入bios了 2.安装系统时注意事项:一般uefi启动对应的是gpt分区&…

柒拾伍- AI内容农场生产文章自动发布至公众号 (一)

一、内容农场 X AI 看过很多的新闻说 AI 产生 内容 污染网络,我也想试一下到底能污染成怎样。 然后为了编写爆款的内容,我选用这个 内容农场 的种子是来源于 微博热搜,让生长出来的垃圾文章更加火爆 涉及内容不能放 二、编写代码 关于代…