news 2026/6/10 16:04:58

TypeScript 中的模块(Modules)详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TypeScript 中的模块(Modules)详解

TypeScript 中的模块(Modules)详解

模块(Modules)是现代 TypeScript 项目中组织和管理代码的最主要方式。它基于 ES6 的importexport语法(也称为 ES Modules 或 ESM),完全取代了旧的命名空间(namespace)。模块系统让代码具备作用域隔离、按需加载、tree-shaking等优势,是当前所有主流框架(React、Vue、Angular、NestJS、Next.js 等)的标准做法。

1. 基本导出与导入
a. 导出(export)
// file: utils.tsexportfunctionsum(a:number,b:number):number{returna+b;}exportconstPI=3.14159;exportinterfaceUser{name:string;age:number;}exportclassCalculator{multiply(x:number,y:number):number{returnx*y;}}// 默认导出(一个模块只能有一个)exportdefaultfunctiongreet(name:string):string{return`Hello,${name}!`;}
b. 导入(import)
// file: main.tsimportgreetfrom"./utils";// 默认导入import{sum,PI,User,Calculator}from"./utils";// 命名导入import{sumasadd}from"./utils";// 重命名import*asUtilsfrom"./utils";// 导入所有为命名空间对象greet("Alice");// "Hello, Alice!"console.log(sum(2,3));// 5console.log(Utils.PI);letcalc=newCalculator();calc.multiply(4,5);
2. 导出方式总结
方式语法示例说明
命名导出export function fn() {}可导出多个
默认导出export default class MyClass {}一个模块只能一个
重新导出(Re-export)export { name } from "./other";聚合模块
全部重新导出export * from "./utils";导出其他模块的所有(不包括默认导出)
重命名导出export { sum as add } from "./math";
3. 模块路径与解析
  • 相对路径"./utils""../models/user"
  • 绝对路径(需配置baseUrlpaths):
// tsconfig.json{"compilerOptions":{"baseUrl":"./src",// 根目录"paths":{"@utils/*":["utils/*"],// 别名"@components/*":["components/*"]}}}

使用:

import{sum}from"@utils/math";importButtonfrom"@components/Button";
4. 模块模式(Module Mode)

tsconfig.json中配置:

配置值输出格式适用环境
"ESNext""ES2022"原生 ES Modules现代浏览器、Vite、Deno、Bun
"CommonJS"require/module.exportsNode.js(传统)
"AMD"/"UMD"/"System"旧模块系统老项目

推荐:现代项目统一使用"ESNext"+"moduleResolution": "node""nodenext"

5. 动态导入(Dynamic Import)—— 按需加载

返回 Promise,适合代码分割、懒加载:

// 静态导入(打包时一起加载)import{heavyFunction}from"./heavy";// 动态导入(运行时加载)asyncfunctionloadHeavy(){constmodule=awaitimport("./heavy");module.heavyFunction();}button.addEventListener("click",loadHeavy);
6. 类型声明模块(Declaration Files)

为非 TS 文件(如.js、第三方库)提供类型:

// file: declarations/jquery.d.tsdeclaremodule"jquery"{exportdefaultfunction$(selector:string):any;}// 使用import$from"jquery";$("#app").html("Hello");

或全局声明:

// file: globals.d.tsdeclareglobal{interfaceWindow{myGlobalVar:string;}}
7. 侧边模块增强(Module Augmentation)

扩展第三方库的类型(常见于 lodash、express 等):

// file: types/express.d.tsimport"express";declaremodule"express"{interfaceRequest{user?:{id:number;name:string};}}// 现在所有 express Request 都有 user 属性类型提示
8. 常见模块使用场景
场景推荐方式
工具函数一个文件导出多个函数
React 组件export default function Component()
类型/接口单独文件导出多个 interface/type
常量配置export const CONFIG = { ... }
聚合导出(barrel)index.tsexport * from "./xxx"
Node.js 服务端"module": "ESNext"+.mjs"type": "module"
9. 最佳实践建议
建议说明
一个文件一个责任每个文件导出相关的一组内容
优先默认导出组件React/Vue 等组件用export default
类型单独文件interfaces/types 放types/或单独.d.ts
使用路径别名配置@utils/*等,提高可读性
避免循环依赖模块相互 import 会导致问题
barrel 文件谨慎使用export * from过多影响 tree-shaking
开启"isolatedModules": true确保兼容 Babel、esbuild 等工具
小结:模块 vs 命名空间
特性模块 (import/export)命名空间 (namespace)
现代推荐强烈推荐已过时
作用域文件级隔离全局或嵌套
加载方式静态/动态,按需脚本加载
tree-shaking支持不支持
声明文件支持常用于旧库

结论:在 2025 年的 TypeScript 开发中,所有新项目都应使用 ES 模块系统。命名空间仅用于维护旧代码或特定声明文件场景。

如果您想看实际项目结构示例(如 React + Vite 的模块组织、Next.js 的页面模块、Node.js 的服务模块),或者想了解如何配置 tsconfig 支持模块,请告诉我!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 17:11:21

【大模型工程化突破】:基于Open-AutoGLM的5阶段高效落地框架

第一章:Shell脚本的基本语法和命令Shell 脚本是 Linux 和 Unix 系统中自动化任务的核心工具,通过编写可执行的文本文件,用户能够组合系统命令、控制程序流程并处理数据。一个基本的 Shell 脚本通常以“shebang”开头,用于指定解释…

作者头像 李华
网站建设 2026/6/10 16:23:35

13、Photoshop 样式与滤镜应用全攻略

Photoshop 样式与滤镜应用全攻略 1. 样式面板应用样式 在 Photoshop 中运用样式面板为图层应用样式,能为图像增添丰富效果。以下是具体操作步骤: 1. 打开图层面板 :点击“Layers”标签打开图层面板。若该标签隐藏,可点击“Window”,再选择“Layers”来打开。 2. 显…

作者头像 李华
网站建设 2026/6/10 16:27:38

14、Photoshop 滤镜与形状绘制全攻略

Photoshop 滤镜与形状绘制全攻略 1. 滤镜应用 在图像处理中,滤镜能为图像增添丰富的效果。以下是几种常见滤镜的应用方法: - 添加纹理 1. 选择要应用滤镜的图层。若只想对部分图像应用滤镜,使用选择工具进行选择。 2. 点击“Filter”。 3. 点击“Filter Gallery”,此…

作者头像 李华
网站建设 2026/6/9 17:18:44

26、深入理解 SharePoint 工作流:功能、部署与表单应用

深入理解 SharePoint 工作流:功能、部署与表单应用 1. 工作流完成状态与验证 当 SharePoint 工作流完成时,“共享文档”列表会新增名为 “My First Workflow” 的列,用于显示工作流的当前状态。若一切按预期完成,该列值为 “Completed”;若工作流仍在运行,显示 “In Pr…

作者头像 李华
网站建设 2026/6/10 16:31:23

18、图像编辑与处理技巧全解析

图像编辑与处理技巧全解析 在图像编辑与处理的领域中,有众多的工具和操作技巧可以帮助我们实现各种创意和需求。下面将详细介绍一些常见的操作和相关工具的使用方法。 打印操作步骤 在Mac系统上进行图像打印时,有一系列详细的操作步骤: 1. 准备打印 - 确认要打印的图…

作者头像 李华
网站建设 2026/6/10 16:24:17

中学应有的几何起码常识让2500年都无人能识的“更无理”数一下子浮出水面推翻“R完备、封闭”论

中学应有的几何起码常识让2500年都无人能识的“更无理”数一下子浮出水面推翻“R完备、封闭”论黄小宁初等数学应有几何起码常识:任何图T(元点不少于两个)的刚体运动都不可使T变为其部分图形。此常识让2500年都无人能识的“更无理”数一下子浮…

作者头像 李华