TypeScript入门八:TypeScript的命名空间
- 初识命名空间(namespace指令)
- 命名空间与文件拆分
- 多重命名空间与三斜杠指令引入依赖文件
一、初识命名空间(namespace指令)
TypeScript的命名空间可以说就是ES6的模块化,其编译的ES5代码都是基于闭包将局部变量暴露给外部,作为外部一个对象的属性提供给外部作用域使用。先来看一个最简单的示例:
namespace MyMath{ //使用namespace指令声明命名空间MyMath
//使用export指令暴露到作用域外部
export const PI = 3.14;
export function sumValue(num1:number, num2:number){
return num1 + num2;
}
}
console.log(MyMath.PI);//在外部使用命名空间
console.log(MyMath.sumValue(2,3));
来看看上面命名空间ES5语法编译的代码:
var MyMath;
(function (MyMath) {
//使用export指令暴露到作用域外部
MyMath.PI = 3.14;
function sumValue(num1, num2) {
return num1 + num2;
}
MyMath.sumValue = sumValue;
})(MyMath || (MyMath = {}));
console.log(MyMath.PI); //在外部使用命名空间
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
然后将第一节中的示例代码拆分到各个文件中:
//a.ts
namespace MyMath{
export const PI = 3.14;
}
//b.ts
namespace MyMath{
export function sumValue(num1:number, num2:number){
return num1 + num2;
}
}
//index.ts--在这里使用命名空间的内容
console.log(MyMath.PI);
console.log(MyMath.sumValue(2,3)); //index.html引入各个ts转换的js脚本
<script src="./a.js"></script>
<script src="./b.js"></script>
<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还有一种使用引入依赖文件的方式来实现,详细请看下一节内容解析。
三、多重命名空间与三斜杠指令引入依赖文件
在解析引入依赖之前,这里补充以下多重命名空间。多重命名空间简单的说就是嵌套的命名空间,然后采用对象属性节点层次依赖的方式来实现。在前面的示例基础上来展示:
//a.ts
namespace MyMath{
export const PI = 3.14;
export namespace MyMathA{ //使用多重命名空间
export const strA = "This is namespace a.";
}
}
//index.ts
console.log(MyMath.PI);//在外部使用命名空间
console.log(MyMath.sumValue(2,3));
console.log(MyMath.MyMathA.strA);//引用多重命名空间的内容
然后在执行转码操作:
tsc --outfile index.js a.ts b.ts index.ts
接着来看使用外部文件引用的方式如何实现多文件统一转码:
//index.ts
///<reference path="a.ts" /> //引入外部文件
///<reference path="b.ts" /> //引入外部文件 console.log(MyMath.PI);//在外部使用命名空间
console.log(MyMath.sumValue(2,3));
console.log(MyMath.MyMathA.strA);//引用多重命名空间的内容
通过“///<reference path="..." />”引入外部文件,这种引入外部文件的操作甚至可以引入jQuery库,然后执行转码就相对比前面的转码方便一点点:
tsc index.ts --outFile index.js
使用引入外部文件统一转码的方式要注意指令outFile(注意大写的F),然后引入的文件就不需要在执行转码指令的时候写到命令中了,而只需要直接对index.js这个入口文件执行转码操作即可。(不过引入外部文件或者执行outfile打包时最好依次按照依赖顺序书写,不按照顺序的方式我没有测试过,不知道会不会有影响,但是这里我们需要考虑js是单线程的执行模式,所以以防转码失败最好还是按照依赖顺序来写)。
TypeScript入门八:TypeScript的命名空间的更多相关文章
- TypeScript入门指南(JavaScript的超集)
TypeScript入门指南(JavaScript的超集) 你是否听过 TypeScript? TypeScript 是 JavaScript 的超集,TypeScript结合了类型检查和静态分析 ...
- TypeScript入门实例
前言 TypeScript是JavaScript的超集,微软公司开发,利用es6语法,实现对js的面向对象编程思想,写代码的时候会像强类型语言一样,指定参数类型.返回值类型,类型不对会报错,但编译后还 ...
- typescript 入门教程一
##### 从今天开始,持续更新typescript入门教程系列.... 目前ts越来越火,主流的前端框架,好比*angular,vue 3*均是采用ts来编写,所有很多公司的项目都是用**ts**来 ...
- TypeScript入门一:配置TS工作环境
配置手动编译TS文件工作环境 配置webpack自动化打包编译工作环境(后面补充) 一.TypeScript入门学习引言 进入主题之前,首先说明这个系列的博客是我刚刚接触TypeScript的学习笔记 ...
- TypeScript入门三:TypeScript函数类型
TypeScript函数类型 TypeScript函数的参数 TypeScript函数的this与箭头函数 TypeScript函数重载 一.TypeScript函数类型 在上一篇博客中已经对声明Ty ...
- TypeScript入门五:TypeScript的接口
TypeScript接口的基本使用 TypeScript函数类型接口 TypeScript可索引类型接口 TypeScript类类型接口 TypeScript接口与继承 一.TypeScript接口的 ...
- typeScript入门配置
typeScript是有微软开发的一款开源的编程语言. TypeScript是JavaScript的一个超集,从今天数以百万计的JavaScript开发者所熟悉的语法和语义开始.可以使用现有的Java ...
- TypeScript 入门教程学习笔记
TypeScript 入门教程学习笔记 1. 数据类型定义 类型 实例 说明 Number let num: number = 1; 基本类型 String let myName: string = ...
- TypeScript 入门自学笔记 — 类型断言(二)
码文不易,转载请带上本文链接,感谢~ https://www.cnblogs.com/echoyya/p/14558034.html 目录 码文不易,转载请带上本文链接,感谢~ https://www ...
随机推荐
- ISO/IEC 9899:2011 条款5——5.1.1 翻译环境
5.1.1 翻译环境 5.1.1.1程序结构 1.一个C程序不需要一次全被翻译完.程序的文本被保存在本国际标准中被称作为源文件(或预处理文件)的单元里.一个源文件连同所有通过指示符#include所包 ...
- windows通过企业内部授权服务器激活方法
OFFICE KMS 激活方法: # 进入office安装目录 cscript ospp.vbs /sethst:kms.domain.com #设置KMS服务器 cscript ospp.vbs / ...
- 25.Flutter中的表单 Radio RadioListTile Switch SwitchListTile 以及表单组件实现一个简单的学员登记系统(下)
四.Radio.RadioListTile单选按钮组件 Radio常用属性: value单选的值. onChanged改变时触发. activeColor:选中的颜色.背景颜色 groupValue: ...
- LeetCode_111. Minimum Depth of Binary Tree
111. Minimum Depth of Binary Tree Easy Given a binary tree, find its minimum depth. The minimum dept ...
- CYLTabBarController的简单使用
#pragma mark- 登录成功跳转至主页 -(void)jumpToMainVC { [UIApplication sharedApplication].statusBarStyle = UIS ...
- Docker从入门到动手实践
一些理论知识,我这里就不累赘了 docker 入门资料,参考:https://yeasy.gitbooks.io/docker_practice/content/ Dockerfile常用命令,图片来 ...
- 安卓 adb命令
获取包名 aapt d badging C:\Users\600844\Desktop\beijingtoon.apk "package launchable-activity" ...
- 最新 蚂蚁金服java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.蚂蚁金服等10家互联网公司的校招Offer,因为某些自身原因最终选择了蚂蚁金服.6.7月主要是做系统复习.项目复盘.Leet ...
- Redis ZSet 有序集合
有序集合类型与集合类型的区别就是他是有序的.有序集合是在集合的基础上为每一个元素关联一个分数,这就让有序集合不仅支持插入,删除,判断元素是否存在等操作外,还支持获取分数最高/最低的前N个元素.有序集合 ...
- 获取radio点击事件
获取radio点击事件,不能用click(),而是用change(). $('input[name="options"]').change(function(){ console. ...