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

在这里插入图片描述

👩 个人主页:不爱吃糖的程序媛
🙋‍♂️ 作者简介:前端领域新星创作者、CSDN内容合伙人,专注于前端各领域技术,成长的路上共同学习共同进步,一起加油呀!
✨系列专栏:前端面试宝典、JavaScript进阶、vue实战
📢 资料领取:前端进阶资料以及文中源码可以在🎈公众号【不爱吃糖的程序媛】领取

一、模块

TypeScript ECMAScript 2015 一样,任何包含顶级 import 或者 export 的文件都被当成一个模块

相反地,如果一个文件不带有顶级的import或者export声明,那么它的内容被视为全局可见的

例如我们在在一个 TypeScript 工程下建立一个文件 1.ts,声明一个变量a,如下:

const a = 1

然后在另一个文件同样声明一个变量a,这时候会出现错误信息

提示重复声明a变量,但是所处的空间是全局的

如果需要解决这个问题,则通过import或者export引入模块系统即可,如下:

const a = 10;export default a

typescript中,export关键字可以导出变量或者类型,用法与es6模块一致,如下:

export const a = 1
export type Person = {name: String
}

通过import 引入模块,如下:

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

二、命名空间

命名空间一个最明确的目的就是解决重名问题

命名空间定义了标识符的可见范围,一个标识符可在多个名字空间中定义,它在不同名字空间中的含义是互不相干的

这样,在一个新的名字空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他名字空间中

TypeScript 中命名空间使用 namespace 来定义,语法格式如下:

namespace SomeNameSpaceName {export interface ISomeInterfaceName {      }export class SomeClassName {      }
}

以上定义了一个命名空间 SomeNameSpaceName,如果我们需要在外部可以调用 SomeNameSpaceName 中的类和接口,则需要在类和接口添加 export 关键字

使用方式如下:

SomeNameSpaceName.SomeClassName

命名空间本质上是一个对象,作用是将一系列相关的全局变量组织到一个对象的属性,如下:

namespace Letter {export let a = 1;export let b = 2;export let c = 3;// ...export let z = 26;
}

编译成js如下:

var Letter;
(function (Letter) {Letter.a = 1;Letter.b = 2;Letter.c = 3;// ...Letter.z = 26;
})(Letter || (Letter = {}));

三、区别

  • 命名空间是位于全局命名空间下的一个普通的带有名字的 JavaScript 对象,使用起来十分容易。但就像其它的全局命名空间污染一样,它很难去识别组件之间的依赖关系,尤其是在大型的应用中

  • 像命名空间一样,模块可以包含代码和声明。 不同的是模块可以声明它的依赖

  • 在正常的TS项目开发过程中并不建议用命名空间,但通常在通过 d.ts 文件标记 js 库类型的时候使用命名空间,主要作用是给编译器编写代码的时候参考使用

参考文献

  • https://www.tslang.cn/docs/handbook/modules.html
  • https://www.tslang.cn/docs/handbook/namespaces.html
  • https://www.tslang.cn/docs/handbook/namespaces-and-modules.html

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

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

相关文章

H3C OSPF 外部路由引入实验

H3C OSPF 外部路由引入实验 实验拓扑 实验需求 按照图示配置 IP 地址R1,R2,R3 运行 OSPF 使内网互通,所有接口(公网接口除外)全部宣告进 Area 0;要求使用环回口作为 Router-id业务网段不允许出现协议报文…

PL/SQL语法--PL/SQL和SQL的异同

目录 引言一、核心概念1、SQL释义:2、PL/SQL释义: 二、功能特点以及实际应用场景1、异同点2、实际应用场景举例: 三、性能与效率对比四、总结五、其他 引言 在Oracle数据库开发与管理中,SQL与PL/SQL作为两种不可或缺的语言工具&am…

请立刻停止编写 Dockerfiles 并使用 docker init

您是那种觉得编写 Dockerfile 和 docker-compose.yml 文件很痛苦的人之一吗? 我承认,我就是其中之一。 我总是想知道我是否遵循了 Dockerfile、 docker-compose 文件的最佳编写实践,我害怕在不知不觉中引入了安全漏洞。 但是现在&#xff0c…

【数据结构和算法初阶(C语言)】时间复杂度(衡量算法快慢的高端玩家,搭配例题详细剖析)

目录 1.算法效率 1.1如何衡量一个算法的好坏 1.2 算法的复杂度 2.主菜-时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.2.1算法的最好,最坏和平均的情况 3.经典时间复杂度计算举例 3.1计算冒泡排序的时间复杂度 3.2计算折半查找的时间复杂度 3.…

Vue3 学习笔记(Day5)

「写在前面」 本文为尚硅谷禹神 Vue3 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容: 1. Vue3 学习笔记(Day1) 2. Vue3 学习笔记(Day2&…

《Docker Compose深度解析:多环境配置、服务扩展与发现》

《Docker Compose深度解析:多环境配置、服务扩展与发现》 1. 引言 Docker Compose 是 Docker 官方提供的用于定义和运行多容器 Docker 应用程序的工具。在上一篇中,我们已经介绍了 Docker Compose 的基本概念和用法。本篇将进一步深入,探讨…

提升培训考试效率的系统设计策略

随着培训的重要性日益凸显,如何提升培训考试系统的效率成为了许多组织和机构关注的焦点。 一、设计自适应的考试界面 培训考试系统的界面应该能够自适应不同的屏幕尺寸和设备类型,如电脑、平板电脑和手机。采用响应式设计技术,确保考生在不同…

Leetcode115. 不同的子序列 -代码随想录

题目: 代码(首刷看解析 2024年2月29日): 不晓得这种超过int和long的测试案例是用来恶心谁的,用DP都没机会取模 class Solution { public:// 动态规划const int MOD 1000000007;int numDistinct(string s, string t) {long n s.…

折线图sns.lineplot()

折线图sns.lineplot 介绍代码介绍 season官网 sns.lineplot() 是 Seaborn 库中用于绘制折线图的函数。这个函数可以可视化数据集中不同变量之间的关系,特别适合展示随时间变化的数据趋势。 下面是 sns.lineplot() 函数的一般用法和一些常用参数: sns.lineplot(x=‘x轴数据…

Mysql8.0 数据库表的基本操作

1,创建表 CREATE TABLE 表名称( 字段名1 数据类型, 字段名2 数据类型, 字段名3 数据类型, ) mysql> create table tb_student(-> sid INT,-> sname VARCHAR(20)-> ); Query OK, 0 rows affected (1.19 sec)mysql> …

市场复盘总结 20240229

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整,采用龙空龙模式 一支股票 10%的时候可以操作, 90%的时间适合空仓等待 二进三: 进级率中 60% 最常用…

06|Mysql内部组件结构

1. 连接器 客户端要向mysql发起通信都必须先跟Server端建立通信连接,而建立连接的工作就是由连接器完成的 mysql -h host[数据库地址] -u root[用户] -p root[密码] -P 3306连接步骤: 1、如果用户名或密码不对,你就会收到一个"Access denied for us…

2024年华为OD机试真题-高效货运-Python-OD统一考试(C卷)

题目描述: 1.老李是货运公司承运人,老李的货车额定载货重量为wt 2.现有两种货物,货物A单件重量为wa,单件运费利润为pa,货物B单件重量为wb,单件运费利润为pb 3.老李每次发车时载货总重量刚好为货车额定载货重…

ChatGPT第四讲

ChatGPT的回答从哪里来? ChatGPT回答问题时通常比问题本身更长,这是因为它需要通过补充额外的信息来提供完整的答案。它的回答来源于对现有信息的抽取和整合,那么具体是怎么进行抽取和整合的呢,下面我们带着这个疑问来详细讨论一下…

【转载】Windows 11 任务栏位置调整

更改注册表(部分win11版本有效) Win R快捷键打开「运行」——执行regedit命令打开「注册表编辑器」进入路径: 计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StuckRects3 修改Settings这个二进制的第 2 行…

前端同时传递文件数据+非文件数据,前后端解决方案

之前录制视频《文件上传组件》的时候有位观众提了个问题,如果我没有理解错的话,应该就是前后同时传递文件数据 非文件数据,前后端数据该如何接收,这里我给出我自己的解决方案 tip:下文在编写前端代码的时候,用到了这篇…

使用WebAssembly提升Web应用性能

文章目录 使用WebAssembly提升Web应用性能引言一、什么是WebAssembly1. WebAssembly的定义2. WebAssembly的目标和用途 二、WebAssembly与JavaScript的比较1. 执行速度2. 类型检查3. 内存管理4. 适用场景 三、WebAssembly的优势1. 提升性能2. 安全性3. 可移植性4. 集成性 四、如…

MYSQL安装及卸载

目录 一、下载 二、解压 三、配置 1. 添加环境变量 2. 初始化MySQL 3. 注册MySQL服务 4. 启动MySQL服务 5. 修改默认账户密码 四、登录MySQL 五、卸载MySQL 一、下载 点开下面的链接:MySQL :: Download MySQL Community Server 点击Download 就可以下载对…

Linux-基础命令(黑马学习笔记)

Linux的目录结构 Linux的目录结构 Linux的目录结构是一个树形结构 Windows系统可以拥有多个盘符,如C盘、D盘、E盘 Linux没有盘符这个概念,只有一个根目录 /,所有文件都在它下面 Linux路径的描述方式 ● 在Linux系统中,路径之…

真实与虚幻的边界:算法备案的重要不言而喻

曾经需要耗费大量时间和精力的人脸生成、替换,现在只需通过先进的深度合成算法便能轻松实现;而以往难以触及的人物属性编辑和操控,如今也已成为创作者手中的得力工具。深度合成技术在图像和视频编辑领域的应用,已然掀起了革命性的…