当前位置: 首页 > news >正文

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 提供坚实的基础。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Unity宏和编辑器
  • 基础动态规划题目基础动态规划题目
  • Java 快速入门学习 -- Day 2
  • 【持续集成_06课_Jenkins高级pipeline应用】
  • Java常用的API_02(正则表达式、爬虫)
  • 【教学类-67-02】20240716毛毛虫ABB排序
  • 探索十大最佳产品设计软件:软件排行榜揭晓
  • Lora模型训练的参数-学习笔记
  • 【学习笔记】无人机(UAV)在3GPP系统中的增强支持(九)-无人机服务区分离
  • 防火墙-NAT策略和智能选路
  • 新手教学系列——简单的服务配置项集中管理
  • python取色器
  • Pycharm 导入 conda 环境
  • 开发指南047-前端模块版本
  • NineData全面支持PostgreSQL可视化表结构设计
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 5、React组件事件详解
  • Flannel解读
  • HashMap剖析之内部结构
  • Idea+maven+scala构建包并在spark on yarn 运行
  • javascript从右向左截取指定位数字符的3种方法
  • leetcode98. Validate Binary Search Tree
  • PHP的类修饰符与访问修饰符
  • React系列之 Redux 架构模式
  • Web Storage相关
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端
  • 前端知识点整理(待续)
  • 如何利用MongoDB打造TOP榜小程序
  • 算法之不定期更新(一)(2018-04-12)
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 第二十章:异步和文件I/O.(二十三)
  • ​2021半年盘点,不想你错过的重磅新书
  • ​决定德拉瓦州地区版图的关键历史事件
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #AngularJS#$sce.trustAsResourceUrl
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (30)数组元素和与数字和的绝对差
  • (Git) gitignore基础使用
  • (pycharm)安装python库函数Matplotlib步骤
  • (苍穹外卖)day03菜品管理
  • (黑马点评)二、短信登录功能实现
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (四) 虚拟摄像头vivi体验
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (一)UDP基本编程步骤
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (自用)交互协议设计——protobuf序列化
  • .Mobi域名介绍