TypeScript基础知识:模块化和命名空间

        在现代的软件开发中,模块化和命名空间是构建可维护、可扩展和可重用代码的关键概念。TypeScript 提供了强大的支持来帮助我们组织和管理代码,本文将深入探讨 TypeScript 中的模块化和命名空间,并提供示例代码来帮助读者更好地理解这些概念。

一、模块化

        模块化是将代码分割成独立的功能单元,每个功能单元被称为一个模块。TypeScript 提供了几种模块化的语法和概念,包括 ES 模块、CommonJS AMD。我们将重点介绍 ES 模块,因为它是目前在 TypeScript 中最常用的模块化系统。

1、导出和导入

        在 TypeScript 中,使用 export 关键字将一个标识符(变量、函数、类等)导出为一个模块的公共接口。通过 import 关键字可以引入其他模块导出的标识符。

示例代码:

// math.ts
export function add(a: number, b: number): number {return a + b;
}// app.ts
import { add } from './math';console.log(add(2, 3)); // 输出: 5

在上面的示例中,math.ts 文件导出了一个名为 add 的函数,然后在 app.ts 文件中通过 import 引入了该函数,并使用它进行了加法运算。

2、默认导出

除了具名导出,TypeScript 还支持默认导出。一个模块只能有一个默认导出,而且不需要使用花括号包裹。

示例代码:

// math.ts
export default function add(a: number, b: number): number {return a + b;
}// app.ts
import add from './math';console.log(add(2, 3)); // 输出: 5

在上面的示例中,math.ts 文件通过 export default 导出了一个名为 add 的函数,并且在 app.ts 文件中使用 import add from './math' 进行了默认导入。

3、模块别名

有时候我们希望给导入的模块起一个别名,以便更好地理解代码或避免命名冲突。可以使用 as 关键字来为导入的模块起别名。

示例代码:

// math.ts
export function add(a: number, b: number): number {return a + b;
}// app.ts
import { add as sum } from './math';console.log(sum(2, 3)); // 输出: 5

在上面的示例中,通过 import { add as sum } from './math'  add 函数导入为 sum,然后在代码中使用 sum 来调用该函数。

二、命名空间

        命名空间是一种组织和封装代码的方式,它将相关的代码包装在一个独立的命名空间中,避免全局命名冲突。在 TypeScript 中,命名空间使用 namespace 关键字定义。

1、命名空间的声明和使用

示例代码:

// shapes.ts
namespace Shapes {export interface Shape {name: string;area(): number;}export class Circle implements Shape {constructor(public name: string, public radius: number) {}area(): number {return Math.PI * this.radius ** 2;}}
}// app.ts
let circle: Shapes.Shape = new Shapes.Circle("Circle", 5);
console.log(circle.area()); // 输出: 78.53981633974483

在上面的示例中,shapes.ts 文件中定义了一个命名空间 Shapes,其中包含一个接口 Shape 和一个类 Circle。然后在 app.ts 文件中通过 Shapes.Shape  Shapes.Circle 来访问这些类型,并创建了一个圆形对象并计算其面积。

2、嵌套命名空间

命名空间可以嵌套定义,以更好地组织和管理代码。

示例代码:

// shapes.ts
namespace Shapes {export namespace TwoD {export interface Shape {name: string;area(): number;}export class Circle implements Shape {constructor(public name: string, public radius: number) {}area(): number {return Math.PI * this.radius ** 2;}}}export namespace ThreeD {export interface Shape {name: string;volume(): number;}export class Sphere implements Shape {constructor(public name: string, public radius: number) {}volume(): number {return (4 / 3) * Math.PI * this.radius ** 3;}}}
}// app.ts
let circle: Shapes.TwoD.Shape = new Shapes.TwoD.Circle("Circle", 5);
console.log(circle.area()); // 输出: 78.53981633974483let sphere: Shapes.ThreeD.Shape = new Shapes.ThreeD.Sphere("Sphere", 5);
console.log(sphere.volume()); // 输出: 523.5987755982989

在上面的示例中,shapes.ts 文件中定义了一个嵌套命名空间 Shapes.TwoD  Shapes.ThreeD,分别包含了二维形状和三维形状的接口和类。然后在 app.ts 文件中使用 Shapes.TwoD.Circle  Shapes.ThreeD.Sphere 来创建圆形和球体对象,并调用它们的方法。

结论

        模块化和命名空间是 TypeScript 中重要的概念,它们提供了组织和管理代码的灵活性和可扩展性。通过使用模块化,我们可以将代码分割成独立的功能单元,提高代码的可维护性和可重用性。而命名空间则提供了一种将相关代码包装在一起的方式,避免全局命名冲突。希望通过本文的介绍和示例代码,读者能够更好地理解和应用模块化和命名空间的概念,从而编写出更加优雅和可维护的 TypeScript 代码。

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

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

相关文章

如何应对Android面试官->我用RecyclerView实现了吸顶效果

前言 RecyclerView 计划用两个章节来讲解,今天主要是以 itemDecoration 和 实现吸顶效果为主; ItemDecoration ItemDecoration 允许应用给具体的 View 添加具体的图画或者 Layout 的偏移,对于绘制 View 之间的分割线,视觉分组边…

用bat脚本执行py文件以及批量执行py文件(全网超详细)

1.前言 对于python代码,每次执行一个文件就要运行一个命令,太过麻烦 在Windows电脑上,想一次性执行多个python文件的代码,就需要用到bat脚本 2.python代码 先写几个python代码的文件 如下图 3.py文件为中文,用bat执…

如何使用CFImagehost结合内网穿透搭建私人图床并无公网ip远程访问

[TOC] 推荐一个人工智能学习网站点击跳转 1.前言 图片服务器也称作图床,可以说是互联网存储中最重要的应用之一,不仅网站需要图床提供的外链调取图片,个人或企业也用图床存储各种图片,方便随时访问查看。不过由于图床很不挣钱&a…

CentOS中如何让新建用户拥有root权限

adduser newuser 新建用户newuser passwd newuser 设置密码 New UNIX password: Retype new UNIX password: 成功创建用户密码 passwd: all authentication tokens updated successfully. 2、赋予root权限 方法一: 修改 /etc/sudoers 文件,找…

WordPiece和SentencePiece区别

BERT(Bidirectional Encoder Representations from Transformers)模型的分词器通常使用子词级别的分词方法,其中最常用的分词器包括 WordPiece 和 SentencePiece。这些分词器用于将文本分成子词(subwords)或标记&#…

腾讯云价格计算器怎么用?太简单了一键报价

腾讯云服务器价格计算器可以一键计算出云服务器的精准报价,包括CVM实例规格价格、CPU内存费用、公网带宽收费、存储系统盘和数据盘详细费用,腾讯云百科txybk.com分享腾讯云价格计算器链接入口、使用方法说明: 腾讯云服务器价格计算器 打开腾…

❤ React报错问题分析

❤ React报错问题分析 ❤️ You passed a second argument to root.render(…) but it only accepts one argument. You passed a second argument to root.render(…) but it only accepts one argument. react-dom.development.js:86 Warning: You passed a second argumen…

css 居中方式

居中分为水平居中和垂直居中

医院患者满意度调查指标设计

医院患者满意度调查指标的设计是确保调查能够准确反映患者体验和医院服务质量的关键步骤。以下是一些常见的医院患者满意度调查指标,可以根据特定需求和目标进行定制: 整体满意度:通过一个综合评分或问卷问题来评估患者对整体医院体验的满意…

js对象和数组的区别

在JavaScript中,对象(Object)和数组(Array)是两种不同的数据结构,它们有着不同的用途和特性。 对象(Object): 定义形式:对象是由键值对组成的,每个…

C++ 数组分页,经常有用到分页,索性做一个简单封装 已解决

在项目设计中, 有鼠标滑动需求,但是只能说能力有限,索性使用 php版本的数组分页,解决问题。 经常有用到分页,索性做一个简单封装、 测试用例 QTime curtime QTime::currentTime();nHour curtime.hour();nMin curtim…

各种排序算法学习笔记

Docshttps://r0dhfl3ujy9.feishu.cn/docx/XFlEdnqv9oCEoVx7ok8cpc4knnf?fromfrom_copylink如果你认为有错误,欢迎指出!

Three.js 镜面反射Reflector 为MeshStandardMaterial增加Reflector能力

效果效果官方案例 区别:官方的案例更像一个镜子 没有纹理等属性 也没有透明度修改 根据源码进行修改为 MeshStandardMaterial实现反射 使用案例 createReflector() {const plane this.helper.create.plane(2, 2);this.helper.add(plane.mesh);plane.mesh.rotat…

juniper EX系列交换机POE配置

PoE(Power over Ethernet,以太网供电,又称远程供电)是指设备通过以太网接口,利用双绞线对外接PD(Powered Device,受电设备)设备(如IP 电话、无线AP、网络摄像头等&#x…

什么是视频短信,能用在什么地方?

视频短信是指通过106短信将带有视频的短信内容发送到对应的手机中,也称之为点对点的信息传递方式,视频短信可以支持2兆以内的多媒体信息发送,是直接、直观的宣传、沟通方式。 一、怎么就偏偏要找视频短信 根据目前的行情状况,尽管…

为什么模方崩过后重新新建工程打开会提示“OSG读取Node失败”?

为什么模方崩过后重新新建工程打开会提示“OSG读取Node失败”? 答:瓦块数据中可能有空文件或者不符合osgb组织结构的文件,可以检查移除。 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的…

3d模型素材亮度和对比度如何调整呢?

1、修改材质参数:打开3ds Max后,选择要调整亮度和对比度的3D模型素材。然后,进入材质编辑器,选择相应的材质球。在材质编辑器中,你可以调整材质的漫反射、反射和高光等参数,这些参数将影响模型的亮度和对比…

C语言实现学生成绩管理系统(单链表)

本次我就用学到的相关链表知识总结回顾一下学生成绩管理系统的实现。 首先还是先创建一个项目,分别创建头文件和源文件,头文件用来声明函数,源文件用来定义函数以及实现学生成绩管理系统。 创建完成后如上图。 先创建一个结构体用来存放学生…

第9章-第3节-Java中的自定义注解

注解:有Override,我们把它称为重写的注解。那么注解到底什么呢?我们能不能自定义注解。 1、概念: 注解是一种能被添加到java代码中的元数据,类、方法、变量、参数和包都可以用注解来修饰。注解对于它所修饰的代码并没有直接的影…

低端单片机彩色屏幕的内存占用疑惑

前言 问题: 假设320*240的rgb565屏幕,320*240*2153600,内存已经150K了,而很多低端单片机接口速度虽然勉强能用,但内存只有20K/8K,整屏的显存是绝对放不下的,只刷一部分都占很多内存&#xff0…