浅析TypeScript 命名空间


Posted in Javascript onMarch 19, 2020

TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准。

TypeScript 由微软开发的自由和开源的编程语言。

TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。

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

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

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

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

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

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

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

SomeNameSpaceName.SomeClassName;

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

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

以下实例演示了命名空间的使用,定义在不同文件中:

IShape.ts 文件代码:

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

嵌套命名空间

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

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

TypeScript 语言特性

TypeScript 是一种给 JavaScript 添加特性的语言扩展。增加的功能包括:

  • 类型批注和编译时类型检查
  • 类型推断
  • 类型擦除
  • 接口
  • 枚举
  • Mixin
  • 泛型编程
  • 名字空间
  • 元组
  • Await

以下功能是从 ECMA 2015 反向移植而来:

  • 模块
  • lambda 函数的箭头语法
  • 可选参数以及默认参数

JavaScript 与 TypeScript 的区别

TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法,因此现有的 JavaScript 代码可与 TypeScript 一起工作无需任何修改,TypeScript 通过类型注解提供编译时的静态类型检查。

TypeScript 可处理已有的 JavaScript 代码,并只对其中的 TypeScript 代码进行编译。

总结

到此这篇关于TypeScript 命名空间的文章就介绍到这了,更多相关TypeScript 命名空间内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
js静态作用域的功能。
Dec 25 Javascript
JavaScript入门教程 Cookies
Jan 31 Javascript
javascript 原型模式实现OOP的再研究
Apr 09 Javascript
javascript实现获取cookie过期时间的变通方法
Aug 14 Javascript
win7下安装配置node.js+express开发环境
Dec 06 Javascript
d3.js实现简单的网络拓扑图实例代码
Nov 06 Javascript
关于微信jssdk实现多图片上传的一点心得分享
Dec 13 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
Nov 22 Javascript
vue 配置多页面应用的示例代码
Oct 22 Javascript
vue elementUI使用tabs与导航栏联动
Jun 21 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
Jul 20 Javascript
layui表格 返回的数据状态异常的解决方法
Sep 10 Javascript
JavaScript计算出两个数的差值
Mar 19 #Javascript
JavaScript利用键盘码控制div移动
Mar 19 #Javascript
js实现百度登录窗口拖拽效果
Mar 19 #Javascript
js实现随机抽奖
Mar 19 #Javascript
js实现抽奖的两种方法
Mar 19 #Javascript
js实现九宫格抽奖
Mar 19 #Javascript
在Vue.js中使用TypeScript的方法
Mar 19 #Javascript
You might like
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
Laravel 5 学习笔记
2015/03/06 PHP
Laravel使用memcached缓存对文章增删改查进行优化的方法
2016/10/08 PHP
Express作者TJ告别Node.js奔向Go
2014/07/14 Javascript
详细解密jsonp跨域请求
2015/04/15 Javascript
JavaScript实现图片自动加载的瀑布流效果
2016/04/11 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
Google 地图叠加层实例讲解
2016/08/06 Javascript
js 获取当前web应用的上下文路径实现方法
2016/08/19 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
JS自定义右键菜单实现代码解析
2020/07/16 Javascript
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
Python生成随机MAC地址
2015/03/10 Python
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
python比较两个列表是否相等的方法
2015/07/28 Python
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
浅谈Python基础之I/O模型
2017/05/11 Python
python安装Scrapy图文教程
2017/08/14 Python
详解Python开发中如何使用Hook技巧
2017/11/01 Python
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
python kmeans聚类简单介绍和实现代码
2018/02/23 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
关于TensorFlow新旧版本函数接口变化详解
2020/02/10 Python
SEPHORA丝芙兰德国官方购物网站:化妆品、护肤品和香水
2020/01/21 全球购物
幼儿园植树节活动总结
2014/07/04 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
小班上学期个人总结
2015/02/12 职场文书
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python