TypeScript将标记为* .d.ts
的文件视为定义文件。 这些文件旨在使用TypeScript来描述由JavaScript库提供的接口。java
JavaScript的缺点:git
- 弱类型,缺少必要的类型检查
- 编程不够语义化,代码可阅读性差
- 代码不可分割,可维护性差
- 开发工具不够智能
TypeScript 是一种由微软开发的自由和开源的编程语言。它是一种JavaScript的一个超集。并且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。github
Link: (http://www.typescriptlang/org)typescript
解决的问题:编程
强类型 智能感知和重构 彻底兼容Javascript 语义化编程和面向对象 集成简便json
TypeScript将来的发展趋势:数组
- 替代Javascript
- 更多的IDE支持
- 不断丰富的Javascript库支持
TypeScript面向对象编程语言
封装函数
- 使用class关键字来代表声明类
- 使用contructor关键字来声明构造函数
- 使用private关键字来声明私有成员
- 可使用get/set来实现私有成员访问器
- 支持静态属性
继承工具
- 使用extends关键字来完成继承
- 使用super关键字来访问父类
模块
- 模块的概念等同于C#中的命名空间 (相似java中的package)
- 使用module关键字来声明模块
- 在模块中默认成员都是私有的
- 在模块中使用export关键字声明公有资源
- 模块支持跨文件分隔
- 在Node.js/Require.js中使用require关键字导入模块
- 可使用import关键字来声明模块的别名
方法
- 方法是Javascript中一个特殊的对象
- 方法分为命名方法和匿名方法
- 方法类型
- 方法推断类型
- 方法参数能够定义默认值
- 方法参数可使用“...” 去定义可变参数组
重载
- Javascript中自己是不支持重载的
- 在TypeScript中使用重载的方法: 一、先声明出全部的方法重载的定义,不包含方法实现 二、再声明出一个参数为Any类型的重载方法 三、实现Any类型的方法,并经过参数类型不一样来去实现重载
接口
在接口中能够包含属性、方法 使用interface关键字定义接口 属性可使用 ? 标识容许为空类型 TypeScript支持隐式接口 接口能够标识为方法类型 接口支持多继承 可使用<接口类型>{}来去隐式声明匿名对象实现接口
接口是一个抽象类型,它不像
类
同样包含任何代码。 它仅定义API的“签名”或形状。 在代码转换期间,interface
不会生成任何代码,它仅在开发期间被Typescript用于类型检查。
泛型方法
模块的导入和导出
模块在其自身的做用域里执行,而不是在全局做用域里;这意味着定义在一个模块里的变量,函数,类等等在模块外部是不 可见的,除非你明确地使用export之一导出它们。 相反,若是想使用其它模块导出的变量,函数,类,接口等的时候,你 必需要导入它们,可使用import之一。 模块是自声明的。在TypeScript里,两个模块之间的关系是经过在文件级别上使用import和export创建的。下面是一个基本例子:
由于JavaScript存在两种不一样的模块引用方式,在编译成JavaScript时,能够经过TypeScript配置文件tsconfig.json指 定编译以后的模块引用方式
导入和导出的重命名
模块导入和导出时默认使用的内部对象的名称。TypeScript也支持在导出前和导入后进行重命名。将上面的例子修改一下
** 或者,若是不知道导入模块的名称,则能够用*号代替**
上面的例子里,对*号代替的全部模块进行重命名为animal_module,则经过animal_module对象能够访问到模块里导出的全部内容。
导出和导出多个对象
默认导出
动态加载模块
在JavaScript里,模块加载方式分别有两种:CommonJS和AMD。在用TypeScript时,要根据最终编译生成JavaScript的方式的配置内容不一样,编写不一样的代码。
命名空间与模块的区别:
命名空间: 代码层面的归类和管理。将有类似功能的代码都归一到同一个空间下进行管理,方便其余代码引用。更多的是侧重代码的复用。
模块: 一个完整功能的封装,对外提供的是一个具备完整功能的功能包,须要显式引用。一个模块里可能会有多个命名空间。
一、命名空间的声明
同Java的包、.Net的命名空间同样,TypeScript的命名空间能够将代码包裹起来,只对外暴露须要在外 部访问的对象。命名空间内的对象经过export关键字对外暴露。
经过namespace关键字声明命名空间,经过export导出须要在外部使用的对象。在命名空间外部需 要经过**“彻底限定名”**访问这些对象。
二、命名空间的引用
三、命名空间的别名