• 初识命名空间(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文件依次引入到页面就可以实现了。比如下面这个示例:

  1. 工作区间
  2. index.html
  3. index.ts
  4. index.js//IDE自动转换的脚本
  5. a.ts
  6. a.js//IDE自动转换的脚本
  7. b.ts
  8. b.js//IDE自动转换的脚本
  9. 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来实现:

  1. 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);//引用多重命名空间的内容

然后在执行转码操作:

  1. 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库,然后执行转码就相对比前面的转码方便一点点:

  1. tsc index.ts --outFile index.js

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

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

  1. TypeScript入门指南(JavaScript的超集)

    TypeScript入门指南(JavaScript的超集)   你是否听过 TypeScript? TypeScript 是 JavaScript 的超集,TypeScript结合了类型检查和静态分析 ...

  2. TypeScript入门实例

    前言 TypeScript是JavaScript的超集,微软公司开发,利用es6语法,实现对js的面向对象编程思想,写代码的时候会像强类型语言一样,指定参数类型.返回值类型,类型不对会报错,但编译后还 ...

  3. typescript 入门教程一

    ##### 从今天开始,持续更新typescript入门教程系列.... 目前ts越来越火,主流的前端框架,好比*angular,vue 3*均是采用ts来编写,所有很多公司的项目都是用**ts**来 ...

  4. TypeScript入门一:配置TS工作环境

    配置手动编译TS文件工作环境 配置webpack自动化打包编译工作环境(后面补充) 一.TypeScript入门学习引言 进入主题之前,首先说明这个系列的博客是我刚刚接触TypeScript的学习笔记 ...

  5. TypeScript入门三:TypeScript函数类型

    TypeScript函数类型 TypeScript函数的参数 TypeScript函数的this与箭头函数 TypeScript函数重载 一.TypeScript函数类型 在上一篇博客中已经对声明Ty ...

  6. TypeScript入门五:TypeScript的接口

    TypeScript接口的基本使用 TypeScript函数类型接口 TypeScript可索引类型接口 TypeScript类类型接口 TypeScript接口与继承 一.TypeScript接口的 ...

  7. typeScript入门配置

    typeScript是有微软开发的一款开源的编程语言. TypeScript是JavaScript的一个超集,从今天数以百万计的JavaScript开发者所熟悉的语法和语义开始.可以使用现有的Java ...

  8. TypeScript 入门教程学习笔记

    TypeScript 入门教程学习笔记 1. 数据类型定义 类型 实例 说明 Number let num: number = 1; 基本类型 String let myName: string = ...

  9. TypeScript 入门自学笔记 — 类型断言(二)

    码文不易,转载请带上本文链接,感谢~ https://www.cnblogs.com/echoyya/p/14558034.html 目录 码文不易,转载请带上本文链接,感谢~ https://www ...

随机推荐

  1. mysql无法导入函数和存储过程解决方法

    1. mysql> SET GLOBAL log_bin_trust_function_creators = 1; 2. 系统启动时 --log-bin-trust-function-creat ...

  2. 置BAT批处理窗口显示颜色

    置BAT批处理窗口显示颜色 摘自:https://blog.csdn.net/tp7309/article/details/53450131 2016年12月04日 01:08:33 亦游 阅读数:1 ...

  3. 一百四十五:CMS系统之帖子加精和取消加精

    模型 class HighlightPostModel(db.Model): """ 帖子加精信息 """ __tablename__ = ...

  4. SpringCloud学习成长之 九 服务链路跟踪

    这篇文章主要讲述服务追踪组件zipkin,Spring Cloud Sleuth集成了zipkin组件. 一.简介 Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案, ...

  5. LeetCode_169. Majority Element

    169. Majority Element Easy Given an array of size n, find the majority element. The majority element ...

  6. MySQL 5.7 源码中的目录结构

    MySQl Server的源码可以直接去Github浏览. 这里我们选择5.7版本的:https://github.com/mysql/mysql-server/tree/5.7 也可以通过: git ...

  7. LINQ语法详解

    我会通过一些列的实例向大家讲解LINQ的语法. 先创建一个Person类,作为数据实体 public class Person { public string Name { get; set; } p ...

  8. react 组装table列表带分页

    2.组装编辑界面 /** * Created by hldev on 17-6-14. */ import React, {Component} from "react"; imp ...

  9. Android 反编译技术流程

    为何需要反编译 作为一名Android开发者,很多的时候需要去学习别人优秀的代码,原本在GitHub上就有很多开源的项目代码,但有的时候在使用软件时候遇到自己想要的功能时,想要学习实现的代码时,这时候 ...

  10. ByteDance面试

    1.HashMap.HashSet源码解读 2.Http状态码.包头内容有哪些 响应头 说明 示例 状态 Access-Control-Allow-Origin 指定哪些网站可以跨域源资源共享 Acc ...