TS 入门(七):TypeScript模块与命名空间

目录

  • 前言
  • 回顾泛型编程
  • 1. 模块
    • a. 导入和导出
    • b. 默认导出
    • c. 重命名导入和导出
  • 2. 命名空间
    • a. 定义命名空间
    • b. 嵌套命名空间
  • 3. 动态导入与条件导入
    • a. 动态导入
    • b. 条件导入
  • 结语

前言

在前几章中,我们学习了 TypeScript 的基础知识、函数与对象类型、接口与类、以及泛型编程。在本章中,我们将深入探讨 TypeScript 中的模块与命名空间。模块和命名空间是组织代码的两种主要方式,它们有助于代码的模块化和重用性。

  • TS 入门(一):TypeScript 简介与安装
  • TS 入门(二):Typescript类型与类型注解
  • TS 入门(三):Typescript函数与对象类型
  • TS 入门(四):TypeScript 高级类型与类型操作
  • TS 入门(五):TypeScript接口与类
  • TS 入门(六):TypeScript泛型编程

回顾泛型编程

在上一章中,我们学习了以下内容:

  • 泛型函数
  • 泛型接口
  • 泛型类
  • 泛型约束
  • 多重类型参数与默认类型

在这里插入图片描述

正文开始如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖


1. 模块

模块是 TypeScript 和 JavaScript 的基本构建块之一,用于组织代码。每个模块都有自己的作用域,不会与其他模块的变量发生冲突。

a. 导入和导出

使用 export 关键字将模块中的变量、函数或类导出,以便在其他模块中使用。

// math.ts
export function add(x: number, y: number): number {return x + y;
}export const PI = 3.14;// main.ts
import { add, PI } from './math';console.log(add(5, 10)); // 15
console.log(PI); // 3.14

b. 默认导出

使用 export default 关键字可以导出一个默认值,每个模块只能有一个默认导出。

// person.ts
export default class Person {name: string;constructor(name: string) {this.name = name;}greet() {console.log(`Hello, my name is ${this.name}`);}
}// main.ts
import Person from './person';let person = new Person("Alice");
person.greet(); // "Hello, my name is Alice"

c. 重命名导入和导出

在导入和导出时,可以使用 as 关键字进行重命名。

// math.ts
export function subtract(x: number, y: number): number {return x - y;
}// main.ts
import { subtract as sub } from './math';console.log(sub(10, 5)); // 5

2. 命名空间

命名空间用于组织代码,可以将相关的代码放在一个命名空间中,以避免全局作用域中的命名冲突。

a. 定义命名空间

使用 namespace 关键字定义命名空间,并将相关的代码放入其中。

namespace Geometry {export function areaOfCircle(radius: number): number {return Math.PI * radius * radius;}export function areaOfRectangle(width: number, height: number): number {return width * height;}
}console.log(Geometry.areaOfCircle(5)); // 78.53981633974483
console.log(Geometry.areaOfRectangle(10, 20)); // 200

b. 嵌套命名空间

命名空间可以嵌套使用,以进一步组织代码。

namespace Animals {export namespace Mammals {export class Dog {bark() {console.log("Woof!");}}}export namespace Birds {export class Sparrow {chirp() {console.log("Chirp!");}}}
}let dog = new Animals.Mammals.Dog();
dog.bark(); // "Woof!"let sparrow = new Animals.Birds.Sparrow();
sparrow.chirp(); // "Chirp!"

3. 动态导入与条件导入

a. 动态导入

使用 import() 语法可以动态导入模块,这在需要按需加载模块时非常有用。

// main.ts
function loadModule(moduleName: string) {import(`./${moduleName}`).then(module => {console.log(module);}).catch(err => {console.error("Failed to load module", err);});
}loadModule('math');

b. 条件导入

可以根据条件有选择地导入模块。

// main.ts
let isMathModuleNeeded = true;if (isMathModuleNeeded) {import('./math').then(module => {console.log(module.add(5, 10)); // 15});
} else {console.log("Math module is not needed.");
}

结语

通过本章的学习,你应该对 TypeScript 中的模块与命名空间有了更深入的理解。掌握这些内容将使你能够更加有效地组织和管理代码。在下一章中,我们将继续探讨 TypeScript 中的装饰器与高级类型操控,包括类装饰器、方法装饰器、访问器装饰器、属性装饰器、参数装饰器、类型别名、映射类型、条件类型和工具类型等内容。务必掌握好每个概念,它们将为你后续学习 TypeScript 提供坚实的基础。

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

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

相关文章

K8S 上部署 Emqx

文章目录 安装方式一:快速部署安装方式二:定制化部署1. 使用 Pod 直接部署 EMQX Broker2. 使用 Deoloyment 部署 Pod3. 使用 Services 公开 EMQX Broker Pod 服务4. 通过 kubernetes 自动集群 EMQX MQTT 服务器5. 修改 EMQX Broker 的配置 安装方式一&am…

Large Language Model系列之二:Transformers和预训练语言模型

Large Language Model系列之二:Transformers和预训练语言模型 1 Transformer模型 Transformer模型是一种基于自注意力机制的深度学习模型,它最初由Vaswani等人在2017年的论文《Attention Is All You Need》中提出,主要用于机器翻译任务。随…

【ollama】ollama运行GLM4-9B和CodeGeeX4-ALL-9B

一、下载GGUF模型 glm-4-9b-chat-GGUFcodegeex4-all-9b-GGUF 使用modelscope下载 先安装 pip install modelscope 命令1 modelscope download --modelLLM-Research/glm-4-9b-chat-GGUF --local_dir . glm-4-9b-chat.Q5_K.gguf命令2 modelscope download --modelLLM-Researc…

昇思25天学习打卡营第02天|张量 Tensor

一、什么是张量 Tensor 张量是一种特殊的数据结构,与数组和矩阵非常相似。张量(Tensor)是MindSpore网络运算中的基本数据结构。 张量可以被看作是一个多维数组,但它比普通的数组更加灵活和强大,因为它支持在GPU等加速…

蓝牙芯片智能秤解决方案

蓝牙秤方案是一种基于蓝牙技术的智能秤解决方案,通过使用蓝牙技术实现秤与移动设备之间的无线通信,将重量数据传输到移动设备上进行处理和展示。蓝牙秤方案可以广泛应用于家庭健康管理、商业零售和物流仓储等领域。 该方案采用蓝牙芯片MG223&#xff0c…

java观察者模式

观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象状态发生变化时,会通知所有观察者,使它们能够自动更新自己的状态。 …

C# ForgettableKnowledge

C#中这五种访问修饰符: public:公有访问。这是最宽松的访问级别,对任何类、结构、接口或程序集都是可见的。这意呀着不仅限于本类成员、子类、实例,还包括任何其他类、结构、接口或程序集中的代码都可以访问。 private&#xff1…

【运维项目经历|038】基于GlusterFS的存储集群优化项目

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 ​ 🏅阿里云ACE认证高级工程师 ​ 🏅阿里云开发者社区专家博主 💊交流社区:CSDN云计算交流社区欢迎您的加入! 目录 项目名称 项目背景 项目目标 …

【D3.js in Action 3 精译_015】1.3 D3 视角下的数据可视化最佳实践(下)

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介 ✔️ 1.1 何为 D3.js?1.2 D3 生态系统——入门须知 1.2.1 HTML 与 DOM1.2.2 SVG - 可缩放矢量图形1.2.3 Canvas 与 WebGL1.2.4 CSS1.2.5 JavaScript1.2.6 Node 与 JavaScript 框架1.2.7 Observable 记事…

<数据集>猫狗识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:3686张 标注数量(xml文件个数):3686 标注数量(txt文件个数):3686 标注类别数:2 标注类别名称:[cat, dog] 序号类别名称图片数框数1cat118811892dog24982498 使用标…

[C/C++入门][ifelse]15、判断奇偶数

数学原理 在数学中,判断一个整数是否为奇数或偶数的依据是基于数的模运算。对于任意整数 n,当 n除以2的余数等于0 时,n 是偶数;当 余数为1 时,n 是奇数。计算机中% 表示模运算,即求余数。 原理分析 偶数…

美团看向7亿老铁的钱包,王莆中还有底牌吗?

文:互联网江湖 作者:刘致呈 7月12日,快手、美团宣布战略合作全面升级,未来三年快手美团合作范围将扩大至全国的“百城万店”。 数据上,过去双方的合作是有正向结果的。 美团商家在快手平台的GMV同比提升超38倍&…

FPGA CFGBVS 管脚接法

说明 新设计了1个KU040 FPGA板子,回来之后接上JTAG FPGA不识别。做如下检查: 1、电源测试点均正常; 2、查看贴片是否有漏焊,检查无异常,设计上NC的才NC; 3、反复检查JTAG接线是否异常,贴片是…

关于R语言单因素与多因素线性回归的平均值.

🏆本文收录于《CSDN问答解答》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…

python实现插入排序、快速排序

python实现插入排序、快速排序 算法步骤: Python实现插入排序快速排序算法步骤: Python实现快速排序算法时间复杂度 插入排序是一种简单直观的排序算法。它的基本思想是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫…

设计模式8种原则

1. 开放封闭 允许对类进行扩展,但禁止更改。 2. 依赖倒置 高层模块(稳定的)不应该依赖于低层模块(变化的,如子类)。二者都应该依赖于抽象。抽象不应该依赖于实现,实现应该依赖于抽象。 3. 里…

ES证书过期替换方案

简介: 在生产环境中,Elasticsearch 集群的证书可能会因为过期而导致集群无法正常工作。为了避免这种情况的发生,我们需要及时更新证书,并保证更新证书的过程中保持 Elasticsearch 集群的高可用性和数据安全性。 集群环境 ES集群版…

【内网穿透】打洞笔记

文章目录 前言原理阐述公网sshfrp转发服务 实现前提第一步:第二步第三步第四步 补充第五步(希望隧道一直开着)sftp传数据(嫌云服务器上的网太慢) 前言 租了一个云服务器,想用vscode的ssh远程连接&#xff…

3.5【C语言】signed和unsigned

其实第3篇 http://t.csdnimg.cn/sdP8f 的数据类型并没有写全 完整版本:short [int],[signed] short [int] ,unsigned short [int];int,[signed] int,unsigned int; long [int],[sin…

C++ LP 开头字符串自定义类型

LPSTR LPCSTR Win32 和 VC 所使用的一种字符串数据类型。 LPCSTR 被定义成是一个指向以’\0’结尾的常量字符的指针。 LPWSTR wchar_t 字符串。 LPCWSTR 是一个指向 unicode 编码字符串的 32 位指针,所指向字符串是 wchar 型,而不是 char 型。 LP…