TypeScript命名空间和模块

news2025/1/20 3:35:57

 🎬 岸边的风:个人主页

 🔥 个人专栏 :《 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.coloradmin.cn/o/1007581.html

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

相关文章

蓝桥杯官网填空题(迷宫)

题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 X 星球的一处迷宫游乐场建在某个小山坡上。它是由 1010 相互连通的小房间组成的。 房间的地板上写着一个很大的字母。我们假设玩家是面朝上坡的方向站立&#xff0…

Spring 的创建和日志框架的整合

目录 一、第一个 Spring 项目 1、配置环境 2、Spring 的 jar 包 Maven 项目导入 jar 包和设置国内源的方法: 3、Spring 的配置文件 4、Spring 的核心 API ApplicationContext 4、程序开发 5、细节分析 (1)名词解释 (2&…

LeetCode 362 期周赛

8029.与车相交的点 题目: 给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i,nums[i] [starti, endi] ,其中 starti 是第 i 辆车的起点,endi 是第 i 辆车的终点。 返回数轴上被车 任意部…

自动化控制系统的设计重点是什么?

要实现对选择性激光烧结系统预热温度的控制,需要找到合理的控制对象模型,但选择性激光烧结设备的预热温度场是一个复杂的非线性系统,很难找到合理的控制对象模型来实现预热温度场的温度控制。模糊控制不需要具体的控制模型,预热温…

Linux命令200例:dnsconf用于配置和管理域名解析服务

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师&#xff0…

极限的概念与性质

目录 极限的概念 极限的性质 极限的存在准则 极限的概念 极限是数学中的分支——微积分的基础概念,它表示无限趋近于一个固定的数值的过程。在高等数学中,极限可以分为数列极限和函数极限。 1.数列的极限 数列的极限是指对于一个数列{an}中的任意一…

socket编程|TCP

一.套接字概念 套接字(Socket)是一种用于网络通信的编程接口,它提供了一种机制,使得不同计算机上的应用程序能够通过网络进行通信和交换数据。 套接字可以看作是应用程序和网络之间的端点,它定义了应用程序与网络之间…

400电话:提供全方位客户服务的热线电话

随着现代社会的发展,企业和机构越来越重视客户服务的质量和效率。为了更好地满足客户的需求,提供及时的帮助和解决方案,许多企业纷纷引入了400电话这一全方位客户服务的热线电话。 400电话是一种以4开头的电话号码,通过该号码可以…

[论文阅读]Coordinate Attention for Efficient Mobile Network Design

摘要 最近关于移动网络设计的研究已经证明了通道注意力(例如, the Squeeze-and-Excitation attention)对于提高模型的性能有显著的效果,但它们通常忽略了位置信息,而位置信息对于生成空间选择性注意图非常重要。在本文中,我们提出…

Redis 三种特殊的数据类型 - Geospatial地理位置 - Hyperloglog基数统计的算法 - Bitmaps位图(位存储)

目录 Redis 三种特殊的数据类型: Geospatial:地理位置 Geospatial类型常用的命令: GEOADD:添加地理位置 GEOPOS:获取地理位置 GEODIST:返回两个给定位置之间的距离 GEORADIUS:以给定的经纬…

公司电脑文件加密防泄密软件系统——「天锐绿盾」

天锐绿盾是一款功能强大的公司电脑文件加密防泄密软件系统,旨在保护企业的知识产权和商业机密。 PC访问地址:http://985.so/2y2n9 它具有以下几个主要特点: 文件加密:天锐绿盾会对存储在公司电脑上的所有敏感文件进行自动加密&am…

uniapp——实现电子签名功能——基础积累

话说,2020年刚来杭州的时候,有用到过uniapp,距今已有三年时间了,果然全忘了,哈哈[笑中带泪] 昨天遇到一个需求:就是要实现pdf文件的预览,着实费了我很多的时间,连晚饭都没有吃好。。…

uniapp——实现在线选座功能——技能提升

首先声明一点:下面的内容是从一个uniapp的程序中摘录的,并非本人所写,先做记录,以免后续遇到相似需求抓耳挠腮。 这里写目录标题 效果图代码——html部分cu-custom组件anil-seat组件 代码——jscss部分 效果图 代码——html部分 …

用区熔拉晶法和光谱分析法评价多晶硅棒的规程.

声明 本文是学习GB-T 29057-2023 用区熔拉晶法和光谱分析法评价多晶硅棒的规程. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 12 试验数据处理 12.1 通过测量取得样品的施主、受主杂质和代位碳、间隙氧杂质含量,再按公式(3)计算多晶硅棒…

掌握MyBatis动态SQL:从标签到实战的全面解析

😀前言 在我们日常的软件开发中,很多时候都会涉及到与数据库的交互操作。在使用MyBatis框架进行数据库操作时,我们可以利用它提供的一系列XML标签来构建动态SQL语句,以满足不同的业务需求。 . 本文主要探讨了如何使用MyBatis的, ,…

数据结构基础7:二叉树【链式结构】实现和递归思想。

二叉树的链式结构实现 一.二叉树链式结构的实现:1.前置说明:1.创建二叉树:2.二叉树的结构: 2.二叉树的遍历:1.二叉树的前中后序遍历:2.内容拓展: 二.二叉树链式(题目)题目一:计算节点…

Python文件操作(04):常见功能

一、read,读 1、读所有 f open(info.txt, moder, encodingutf-8) # 模式是r/rt,必须在内部使用encoding将文本转换成字符串类型 data f.read() f.close()f open(info.txt, moderb) # 模式是rb,不能加encoding,否则报错&…

栈的应用-综合计数器的实现

目录 前言 一、思路分析 二、代码实现 总结 前言 在实现综合计数器之前,大家应该先了解一下什么是前中后缀表达式 前缀、中缀和后缀表达式是表示数学表达式的三种不同方式。 前缀表达式(也称为波兰式或前缀记法):操作符位于操作数之前。…

基于51单片机超市快递寄存自动柜 GSM远程密码手机验证码系统

一、系统方案 本设计采用52单片机作为主控器,GSM模块,液晶1602显示,矩阵键盘输入,蜂鸣器报警。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 /*******************************************…

阿里云服务器配置选择指南(2023新版教程)

阿里云服务器配置选择_CPU内存/带宽/存储配置_小白指南,阿里云服务器配置选择方法包括云服务器类型、CPU内存、操作系统、公网带宽、系统盘存储、网络带宽选择、安全配置、监控等,阿小云分享阿里云服务器配置选择方法,选择适合自己的云服务器…