鸿蒙TypeScript学习第19天【命名空间】

news/2024/10/22 11:30:03/

1、TypeScript 命名空间

命名空间一个最明确的目的就是解决重名问题。

假设这样一种情况,当一个班上有两个名叫小明的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的姓(王小明,李小明),或者他们父母的名字等等。

命名空间定义了标识符的可见范围,一个标识符可在多个命名空间中定义,它在不同命名空间中的含义是互不相干的。这样,在一个新的命名空间中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他命名空间中。

TypeScript 中命名空间使用 namespace 来定义,语法格式如下:

namespace SomeNameSpaceName { export interface ISomeInterfaceName {      }  export class SomeClassName {      }  
}复制

以上定义了一个命名空间 SomeNameSpaceName,如果我们需要在外部可以调用 SomeNameSpaceName 中的类和接口,则需要在类和接口添加 export 关键字。

要在另外一个命名空间调用语法格式为:

SomeNameSpaceName.SomeClassName;

如果一个命名空间在一个单独的 TypeScript 文件中,则应使用三斜杠 /// 引用它,语法格式如下:

/// <reference path = "SomeFileName.ts" />

以下实例演示了命名空间的使用,定义在不同文件中:qr23.cn/AKFP8k点击或复制转到。

搜狗高速浏览器截图20240326151547.png

IShape.ts 文件代码:

HarmonyOS与OpenHarmony开发文档+mau123789是v直接拿取namespace Drawing { export interface IShape { draw(); }
}复制

Circle.ts 文件代码:

/// <reference path = "IShape.ts" /> 
namespace Drawing { export class Circle implements IShape { public draw() { console.log("Circle is drawn"); }  }
}复制

Triangle.ts 文件代码:

/// <reference path = "IShape.ts" /> 
namespace Drawing { export class Triangle implements IShape { public draw() { console.log("Triangle is drawn"); } } 
}复制

TestShape.ts 文件代码:

/// <reference path = "IShape.ts" />   
/// <reference path = "Circle.ts" /> 
/// <reference path = "Triangle.ts" />  
function drawAllShapes(shape:Drawing.IShape) { shape.draw(); 
} 
drawAllShapes(new Drawing.Circle());
drawAllShapes(new Drawing.Triangle());复制

使用 tsc 命令编译以上代码:

tsc --out app.js TestShape.ts  

得到以下 JavaScript 代码:

JavaScript

/// <reference path = "IShape.ts" /> 
var Drawing;
(function (Drawing) {var Circle = /** @class */ (function () {function Circle() {}Circle.prototype.draw = function () {console.log("Circle is drawn");};return Circle;}());Drawing.Circle = Circle;
})(Drawing || (Drawing = {}));
/// <reference path = "IShape.ts" /> 
var Drawing;
(function (Drawing) {var Triangle = /** @class */ (function () {function Triangle() {}Triangle.prototype.draw = function () {console.log("Triangle is drawn");};return Triangle;}());Drawing.Triangle = Triangle;
})(Drawing || (Drawing = {}));
/// <reference path = "IShape.ts" />   
/// <reference path = "Circle.ts" /> 
/// <reference path = "Triangle.ts" />  
function drawAllShapes(shape) {shape.draw();
}
drawAllShapes(new Drawing.Circle());
drawAllShapes(new Drawing.Triangle());复制

使用 node 命令查看输出结果为:

$ node app.js
Circle is drawn
Triangle is drawn

2、嵌套命名空间

命名空间支持嵌套,即你可以将命名空间定义在另外一个命名空间里头。

namespace namespace_name1 { export namespace namespace_name2 {export class class_name {    } } 
}复制

成员的访问使用点号 . 来实现,如下实例:

Invoice.ts 文件代码:

namespace Runoob { export namespace invoiceApp { export class Invoice { public calculateDiscount(price: number) { return price * .40; } } } 
}复制

InvoiceTest.ts 文件代码:

/// <reference path = "Invoice.ts" />
var invoice = new Runoob.invoiceApp.Invoice(); 
console.log(invoice.calculateDiscount(500));复制

使用 tsc 命令编译以上代码:

tsc --out app.js InvoiceTest.ts

得到以下 JavaScript 代码:

JavaScript

var Runoob;
(function (Runoob) {var invoiceApp;(function (invoiceApp) {var Invoice = /** @class */ (function () {function Invoice() {}Invoice.prototype.calculateDiscount = function (price) {return price * .40;};return Invoice;}());invoiceApp.Invoice = Invoice;})(invoiceApp = Runoob.invoiceApp || (Runoob.invoiceApp = {}));
})(Runoob || (Runoob = {}));
/// <reference path = "Invoice.ts" />
var invoice = new Runoob.invoiceApp.Invoice();
console.log(invoice.calculateDiscount(500));复制

使用 node 命令查看输出结果为:

$ node app.js
200

http://www.ppmy.cn/news/1423257.html

相关文章

springboot mongodb 数据添加时更改‘_class‘字段

重写beanMappingMongoConverter 修改DefaultMongoTypeMapper /*** 更改默认的 MongoDB 映射转换器,更改_class字段** param factory MongoDB 工厂对象* param context MongoDB 映射上下文* param beanFactory springBean 工厂* return MongoDB 映射转换器*/Beanpublic…

Debezium系列之:Debezium2.6稳定版本Oracle数据库Debezium Connector的属性参数详解

Debezium系列之:Debezium2.6稳定版本Oracle数据库Debezium Connector的属性参数详解 一、连接器属性二、必需的 Debezium Oracle 连接器配置属性三、Debezium Oracle 连接器数据库架构历史配置属性四、用于配置生产者和消费者客户端的传递数据库架构历史属性五、Debezium 连接…

【Python100+例】练完所有例题

前言&#xff1a; 有疑问的可以相互沟通学习交流&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 1.两数之和 a, b 3.5, 4.0print(f"{a}{b}的和是{ab}")------------------------------------- 1.元组赋值可以省略括号 2.…

(二十八)Flask之wtforms库【上手使用篇】

目录&#xff1a; 每篇前言&#xff1a;用户登录验证&#xff1a;用户注册验证&#xff1a;使用示例&#xff1a; 抽象解读使用wtforms编写的类&#xff1a;简单谈一嘴&#xff1a;开始抽象&#xff1a; 每篇前言&#xff1a; &#x1f3c6;&#x1f3c6;作者介绍&#xff1a;【…

利用FFmpeg 转换课程vtt 字幕到 srt字幕

字幕转换工具 经常学习udemy 视频课程的&#xff0c;可能知道&#xff0c;从网络下载的udemy 课程文件里面有时候字幕是vtt 格式的&#xff0c;有时候想导入到百度网盘里面&#xff0c;怎奈百度网盘&#xff0c;不支持vtt 字幕格式。有字幕的时候&#xff0c;会比较好多了。既可…

windows11 wsl2 ubuntu20.04安装vision mamba并进行测试

windows11 wsl2 ubuntu20.04安装vision mamba 安装流程使用cifar-100测试安装成功 安装流程 vision mamba安装了半天才跑通&#xff0c;记录一下流程在wsl上安装cuda wget https://developer.download.nvidia.cn/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05…

AI大模型

工欲善其事必先利其器 软件开发也要与时俱进&#xff0c;了解下AI大模型的工具 上点黑科技干货 开整 ~ 背景介绍 天工AI通义灵码KIMI 通义灵码 免费&#xff0c;功能强大 通义灵码&#xff0c;是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数…

管理能力学习笔记五:识别团队角色,因才施用

识别团队角色&#xff0c;因才施用&#xff0c;需要做到以下三点 扬长避短 管理者要学会问自己员工能把什么做好&#xff0c;而不是想方设法改造他们的短处 。 – 彼得德鲁克 人岗匹配 将合适的人放在合适的位置 人才多样化 团队需要各式各样的人才&#xff0c;才能高效配合…