TypeScript入门八:TypeScript的命名空间

  • 初识命名空间(namespace指令)
  • 命名空间与文件拆分
  • 多重命名空间与三斜杠指令引入依赖文件

一、初识命名空间(namespace指令)

TypeScript的命名空间可以说就是ES6的模块化,其编译的ES5代码都是基于闭包将局部变量暴露给外部,作为外部一个对象的属性提供给外部作用域使用。先来看一个最简单的示例:

1 namespace MyMath{ //使用namespace指令声明命名空间MyMath
2     //使用export指令暴露到作用域外部
3     export const PI = 3.14;
4     export function sumValue(num1:number, num2:number){
5         return num1 + num2;
6     }
7 }
8 console.log(MyMath.PI);//在外部使用命名空间
9 console.log(MyMath.sumValue(2,3));

来看看上面命名空间ES5语法编译的代码:

 1 var MyMath;
 2 (function (MyMath) {
 3     //使用export指令暴露到作用域外部
 4     MyMath.PI = 3.14;
 5     function sumValue(num1, num2) {
 6         return num1 + num2;
 7     }
 8     MyMath.sumValue = sumValue;
 9 })(MyMath || (MyMath = {}));
10 console.log(MyMath.PI); //在外部使用命名空间
11 console.log(MyMath.sumValue(2, 3));

二、命名空间与文件拆分

前面我们已经知道TypeScript命名空间就是将闭包内部的变量,通过暴露到外部以对象引用的方式给外部使用,当一个页面基于多个Ts脚本文件时,能想到的第一个方法就是将各个Ts文件转换的js文件依次引入到页面就可以实现了。比如下面这个示例:

工作区间
    index.html
    index.ts
    index.js//IDE自动转换的脚本
    a.ts
    a.js//IDE自动转换的脚本
    b.ts
    b.js//IDE自动转换的脚本
    tsconfig.json

然后将第一节中的示例代码拆分到各个文件中:

 1 //a.ts
 2 namespace MyMath{
 3     export const PI = 3.14;
 4 }
 5 //b.ts
 6 namespace MyMath{
 7     export function sumValue(num1:number, num2:number){
 8         return num1 + num2;
 9     }
10 }
11 //index.ts--在这里使用命名空间的内容
12 console.log(MyMath.PI);
13 console.log(MyMath.sumValue(2,3));
14
15 //index.html引入各个ts转换的js脚本
16     <script src="./a.js"></script>
17     <script src="./b.js"></script>
18     <script src="./index.js"></script>

上面这种最暴力的方式显然不能成为我们最想要的,TS当然也给我们提供了一个解决方案,通过IDE将所有ts转码到一个js脚本中,通过命令行工具outfile来实现:

 tsc --outfile index.js a.ts b.ts index.ts

通过outfile命令将a.ts、b.ts、index.ts就可以统一转码打包到一个index.js文件中,然后index.html就只需要引入一个index.js文件就可以了。

但是这时候可能你还是会觉得不够智能,你会想能不能像之前单个文件自动转码成一个js文件一样,也将多个ts文件自动转码到一个js文件中呢?当然还是可以的,全自动化的转码需要基于模块来实现,这篇博客不会涉及,但是除了上面这种转码模式,Ts还有一种使用引入依赖文件的方式来实现,详细请看下一节内容解析。

三、多重命名空间与三斜杠指令引入依赖文件

在解析引入依赖之前,这里补充以下多重命名空间。多重命名空间简单的说就是嵌套的命名空间,然后采用对象属性节点层次依赖的方式来实现。在前面的示例基础上来展示:

 1 //a.ts
 2 namespace MyMath{
 3     export const PI = 3.14;
 4     export namespace MyMathA{ //使用多重命名空间
 5         export const strA = "This is namespace a.";
 6     }
 7 }
 8 //index.ts
 9 console.log(MyMath.PI);//在外部使用命名空间
10 console.log(MyMath.sumValue(2,3));
11 console.log(MyMath.MyMathA.strA);//引用多重命名空间的内容

然后在执行转码操作:

tsc --outfile index.js a.ts b.ts index.ts

接着来看使用外部文件引用的方式如何实现多文件统一转码:

1 //index.ts
2 ///<reference path="a.ts" />  //引入外部文件
3 ///<reference path="b.ts" />  //引入外部文件
4
5 console.log(MyMath.PI);//在外部使用命名空间
6 console.log(MyMath.sumValue(2,3));
7 console.log(MyMath.MyMathA.strA);//引用多重命名空间的内容

通过“///<reference path="..." />”引入外部文件,这种引入外部文件的操作甚至可以引入jQuery库,然后执行转码就相对比前面的转码方便一点点:

tsc index.ts --outFile index.js

使用引入外部文件统一转码的方式要注意指令outFile(注意大写的F),然后引入的文件就不需要在执行转码指令的时候写到命令中了,而只需要直接对index.js这个入口文件执行转码操作即可。(不过引入外部文件或者执行outfile打包时最好依次按照依赖顺序书写,不按照顺序的方式我没有测试过,不知道会不会有影响,但是这里我们需要考虑js是单线程的执行模式,所以以防转码失败最好还是按照依赖顺序来写)。

原文地址:https://www.cnblogs.com/ZheOneAndOnly/p/11780558.html

时间: 2024-10-20 09:30:02

TypeScript入门八:TypeScript的命名空间的相关文章

【第11篇】最全的中文TypeScript入门指南详解案例教程与代码案例

一.最全的中文TypeScript入门指南详解案例教程           文档下载 二.代码案例 源代码下载 手机微信扫一扫有惊喜... ================================================================================================================= 1.详细安装文章请看 http://blog.csdn.net/jilongliang/article/details/219429

TypeScript入门指南(JavaScript的超集)

TypeScript入门指南(JavaScript的超集) 你是否听过 TypeScript? TypeScript 是 JavaScript 的超集,TypeScript结合了类型检查和静态分析,显式接口.TypeScript是微软的开源项目,它是由C#之父Anders Hejlsberg发起的. 为什么会有 TypeScript? JavaScript 只是一个脚本语言,并非真正设计用于开发大型 Web 应用,JavaScript 没有提供类和模块等概念,对于一个真正的应用开发,TypeSc

TypeScript入门五:TypeScript的接口

TypeScript接口的基本使用 TypeScript函数类型接口 TypeScript可索引类型接口 TypeScript类类型接口 TypeScript接口与继承 一.TypeScript接口的基本使用 1.1定义TypeScript接口的指令(interface) 接口让我们想到的第一个短语就是(API).比如日常我们所说的调用某某程序的API一般都是跨应用的接口,如别的网站的或者APP的接口:还有我们每天都是用的编程语言的指令和内置的方法及属性,这些可以叫做编程语言的接口:还有令我们既

TypeScript入门三:TypeScript函数类型

TypeScript函数类型 TypeScript函数的参数 TypeScript函数的this与箭头函数 TypeScript函数重载 一.TypeScript函数类型 在上一篇博客中已经对声明TypeScript类型变量已经做了初步的解析,这里先回顾以下: 1 //声明函数 2 function add1(x:number,y:number):number{ 3 return x+y; 4 } 5 6 let add2 = function(x:number,y:number):number

TypeScript 入门指南

你是否听过 TypeScript? TypeScript 是微软开发的 JavaScript 的超集,TypeScript兼容JavaScript,可以载入JavaScript代码然后运行.TypeScript与JavaScript相比进步的地方 包括:加入注释,让编译器理解所支持的对象和函数,编译器会移除注释,不会增加开销:增加一个完整的类结构,使之更新是传统的面向对象语言. 为什么会有 TypeScript? JavaScript 只是一个脚本语言,并非设计用于开发大型 Web 应用,Jav

TypeScript入门指南

原文转自:http://www.oschina.net/question/12_72250 TypeScript 是微软开发的 JavaScript 的超集,TypeScript兼容JavaScript,可以载入JavaScript代码然后运行.TypeScript与JavaScript相比进步的地方 包括:加入注释,让编译器理解所支持的对象和函数,编译器会移除注释,不会增加开销:增加一个完整的类结构,使之更新是传统的面向对象语言. 为什么会有 TypeScript? JavaScript 只是

TypeScript入门教程

TypeScript是什么 TypeScript是JavaScript的一个超集 TypeScript需要编译为JavaScript才能运行(语法糖) TypeScript提供了类型系统,规范类似Java TypeScript提供了ES6的支持,也可以支持部分ES7草案的特性,不用担心TypeScript无法兼容目前主流的JavaScript解释器 环境安装 安装node.js https://nodejs.org/en/download/ 安装TypeScript包,这就是TS的编译器 npm

typescript 入门 01

安装 typescript cmd: npm  install -g typescript 安装成功以后  就可以使用 tsc 命令   例如 tsc -V 查看当前typescript的版本 typescript文件 的运行 需要进行编译成为js 文件,然后通过node 运行js 文件 编译命令:tsc xxx.ts      运行命令 node xxx.js 原文地址:https://www.cnblogs.com/duanyiwen/p/11789242.html

VueJS + TypeScript 入门第一课

楔子 伴随着 Vue 新版本发布对 TypeScript 支持越来越好.当然值得在项目中使用优秀的技术栈. 学习要求背景知识 * NodeJs * NpmJs * VueJS * TypeScript 创建 VueJS - TypeScript 项目 使用官方推荐的脚手架 Vue Cli vue create VueJs-TypeScript // 项目名为 VueJs-TypeScript,另外创建过程中,请选 "Manually select features",后选中 TypeS