发布时间:2026/7/25 6:56:08
ArkTS 模块及命名空间介绍 模块的导入和导出在实际开发中代码不会都写在一个文件里。如果所有代码都堆在一起后续想修改某个功能、找某个逻辑简直就是大海捞针因此在实际开发中通常会将代码拆分成多个文件这样管理和维护起来更加方便。模块是代码拆分、复用与隔离的核心机制一将复杂项目按功能业务拆分成多个独立文件每个文件就是一个模块通过 export 暴露模块内的接口、类、函数再通过 import 在其他模块中导入使用。在 ArkTS 中一个文件就是一个模块不同文件之间的代码是隔离的。通俗地讲在 A 文件中写的函数、类、变量在 B 文件里是无法直接使用的。编译器会报错提示“找不到内容”。这里在 Device 文件中定义了 Device 类在 Light 文件定义了 Light 类并且想要继承 Device 类。但编译器中却提示找不到 Device 类的错误因为两个文件的作用域是分开的互相不认识。// Device 文件 class Device { name: string ; constructor(name: string) { this.name name; } } // Light 文件 // 找不到名称Device class Light extends Device { name: string 灯; protected status: string off; turnOn(): void { this.status on; } }这里可以通过 export 和 import 关键字实现在 Light 文件中使用 Device 文件的代码。// Device 文件 export class Device { name: string ; constructor(name: string) { this.name name; } } // Light 文件 import { Device } from ./Device; class Light extends Device { name: string 灯; protected status: string off; turnOn(): void { this.status on; } }命名导入与导出直接在成员声明前加 export可导出多个成员导入时需用同名接收。// /module/Light文件 // 导出类灯光类 export class Light extends Device { name: string 客厅灯; } // 导出常量默认亮度 export const DEFAULT_BRIGHTNESS 50; // 导出函数创建默认配置的灯 export function createDefaultLight(name: string): Light { return new Light(name); } // 导出接口设备配置结构 export interface LightConfig { name: string; }导入命名导出的成员用 import{成员名 1, 成员名 2, …} from “模块路径”,成员名必须和导出时一致可以通过 as 重命名。// Test 文件 import { Light, createDefaultLight, DEFAULT_BRIGHTNESS, LightConfig as Config } from ../module/Light; let lightConfig: Config { name: , maxBrightness: DEFAULT_BRIGHTNESS } createDefaultLight(light);默认导出与导入一个模块只能有一个默认导出使用 export default 声明。导入时可以自定义名称无需与导出名称一致。默认导出适合模块的核心功能例如模块只暴露一个类。// /module/Light 文件 export default class Light extends Device { name: string 客厅灯; protected _status: string off; turnOn(): void { this._status on; } }导入默认导出的成员用 import 自定义名称 from “模块路径”名称可自定义无需和导出时一致。// Test 文件 import LightClass from ../module/Light’; let light new LightClass(客厅灯);动态导入动态导入是 ArkTS 中用于按需加载模块的核心机制会返回 Promise 对象并以异步方式实现模块的条件加载和运行时解耦适用于性能优化和复杂业务场景。例如有时导入的模块太大直接使用静态导入会让代码加载速度变慢。如果要导入的模块一开始不存在需要等待一段时间例如需要从网路上获取。这时就可以动态导入。动态导入的好处是按需加载或者根据条件加载可以提升加载速度让应用更加流畅。import(../module/Light) .then((lightImport) { lightImport.createDefaultLight(light); console.log(${lightImport.DEFAULT_BRIGHTNESS}); }) .catch((error: BusinessError) { console.error(error ${error.code} ${error.message}); });命名空间的概念和使用命名空间是通过 namespace 关键字定义的代码逻辑边界用于将相关类、接口、函数等组织在一起避免命名冲突并提高代码可维护性。namespace命名空间名称{export接口、变量、函数、类}namespace DeviceControl { // 导出类 export class Device { name: string ; } // 导出接口设备配置结构 export interface LightConfig { name: string; maxBrightness: number; } // 导出函数创建默认配置的灯 export function createDevice(): Device { return new Device(); } // 导出常量默认亮度 export const DEFAULT_BRIGHTNESS 50; }可以通过命名空间.成员名访问导出内容。// /module/DeviceNamespace文件 export namespace DeviceControl { // 导出类 export class Device { name: string ; } // 导出接口设备配置结构 export interface LightConfig { name: string; } // 导出函数创建默认配置的灯 export function createDevice(): Device { return new Device(); } // 导出常量默认亮度 export const DEFAULT_BRIGHTNESS 50; }// Test文件 import { DeviceControl } from ../module/DeviceNamespace; let device new DeviceControl.Device(light); let lightConfig: DeviceControl.LightConfig { name: , maxBrightness: DeviceControl.DEFAULT_BRIGHTNESS } let airConditioner DeviceControl.createDevice(airConditioner);

相关新闻

2026/7/25 6:56:08

C++ INI文件读写器实现:从设计到源码的完整指南

1. 项目概述:为什么INI文件在C项目中依然重要?在接手一个C项目,尤其是涉及到配置管理时,我们常常会面临一个选择:配置文件用什么格式?XML、JSON、YAML,还是INI?尽管INI格式看起来有些…

2026/7/25 6:56:08

大模型开发实战:超越API调用的技术纵深与优化策略

1. 大模型开发的真实面貌:超越API调用的技术纵深上周帮一个创业团队评审他们的AI产品时,发现工程师把所有业务逻辑都塞进了prompt模板里。当我问及推理优化策略时,对方很自然地回答:"用GPT-4不就行了?"这种认…

2026/7/25 6:56:08

AI招聘系统如何提升17倍筛选效率与人机协作

1. 项目背景与核心价值去年我们团队上线eRoad AI招聘系统时,HR部门每天要处理300简历,平均每份简历筛选时间超过8分钟。现在系统能将初筛效率提升17倍,业务部门满意度从62%飙升至89%。这套系统最颠覆性的改变不是技术参数,而是彻底…

2026/7/25 8:21:12

REFramework终极指南:从零掌握RE引擎游戏改造神器

REFramework终极指南:从零掌握RE引擎游戏改造神器 【免费下载链接】REFramework Mod loader, scripting platform, and VR support for all RE Engine games 项目地址: https://gitcode.com/GitHub_Trending/re/REFramework 想要彻底改变你的《生化危机》、《…

2026/7/25 8:21:12

前端加密传输最佳实践:基于RSA+AES混合加密方案

1. 项目概述:为什么前端加密不再是“选修课”几年前,提到前端数据加密,很多开发者的第一反应可能是:“有必要吗?不是有HTTPS吗?” 或者“后端验证一下不就行了?”。但随着Web应用复杂度的飙升和…

2026/7/25 8:21:12

告别臃肿!G-Helper:华硕笔记本的极速控制神器

告别臃肿!G-Helper:华硕笔记本的极速控制神器 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook,…

2026/7/25 8:21:12

昆仑芯XPU优化大模型推理:性能提升3倍

1. 项目背景与核心价值 去年在部署千亿参数大模型时,我们团队就深刻体会到推理效率的瓶颈问题。当看到百度百舸平台基于昆仑芯XPU完成GLM-4.x在SGLang与vLLM框架的适配落地时,我立刻意识到这可能是解决实际业务痛点的关键技术突破。这种异构计算方案让单…

2026/7/25 8:16:12

AI自动化影视制作:baoyu-skills技术解析与应用

1. 项目背景与核心价值最近在AI内容生成领域,一个名为"baoyu-skills"的技术方案正在影视工业化赛道掀起波澜。这个方案最吸引我的地方在于它实现了从纯文本剧本到完整动态视听内容的端到端自动化生产——简单来说,你只需要输入一段故事文本&am…

2026/7/23 12:54:51

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/25 0:00:15

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:15

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:15

VHF 甚高频语音喊话系统(桥梁智能防撞场景)核心优势

一、直达船员,预警链路最短营运船舶强制标配 VHF 船载电台,属于驾驶室常态化值守设备;预警语音直接传递至驾驶人员,区别于岸上声光报警(船员经常听不到)、短信 / 小程序(船员极少主动查看&#…

2026/7/25 0:59:36

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…