TypeScript是JavaScript的类型化超集,可编译为纯JavaScript。
任何浏览器、主机、操作系统,开源。
说明
安装
1 | npm install -g typescript |
第一个TypeScript文件
- 新建
greeter.ts
文件
1 | // 接口 |
- 新建
greeter.html
文件
1 |
|
- 编译代码
1 | tsc greeter.ts |
- 在浏览器里打开
greeter.html
查看页面
将输出 greeter.js
结果文件
tsconfig.json
目录存在 tsconfig.json
文件,说明此目录是 TypeScript
项目
基础类型
1 | // 布尔值 |
变量声明
var
: 全局或同一函数下,声明有效,在条件语句、块语句中声明,块外有效let
: 块外无效,必须先定义后使用,同一块不能重复定义,不同块、作用域,相同名称不同变量const
: 声明时必须赋值,不可重新赋值
解构
1 | // 解构数组 |
接口
1 | interface LabelledValue { |
类
1 | // 继承 |
函数
1 | let myAdd: (baseValue: number, increment: number) => number = |
泛型
1 | function identity<T>(arg: T): T { |
枚举
1 | enum Direction { |
类型推论
1 | let x = 3; |
类型兼容性
1 | interface Named { |
高级类型
1 | // 交叉类型 |
Symbols
- Symbol.hasInstance: 方法,会被instanceof运算符调用。构造器对象用来识别一个对象是否是其实例。
- Symbol.isConcatSpreadable: 布尔值,表示当在一个对象上调用Array.prototype.concat时,这个对象的数组元素是否可展开。
- Symbol.iterator: 方法,被for-of语句调用。返回对象的默认迭代器。
- Symbol.match: 方法,被String.prototype.match调用。正则表达式用来匹配字符串。
- Symbol.replace: 方法,被String.prototype.replace调用。正则表达式用来替换字符串中匹配的子串。
- Symbol.search: 方法,被String.prototype.search调用。正则表达式返回被匹配部分在字符串中的索引。
- Symbol.species: 函数值,为一个构造函数。用来创建派生对象。
- Symbol.split: 方法,被String.prototype.split调用。正则表达式来用分割字符串。
- Symbol.toPrimitive: 方法,被ToPrimitive抽象操作调用。把对象转换为相应的原始值。
- Symbol.toStringTag: 方法,被内置方法Object.prototype.toString调用。返回创建对象时默认的字符串描述。
- Symbol.unscopables: 对象,它自己拥有的属性会被with作用域排除在外。
1 | let sym1 = Symbol(); |
迭代器和生成器
1 | // for..of |
模块
1 | // 导出 |
命名空间
1 | namespace Validation { |
模块解析
声明合并
1 | // 合并接口 |
JSX
使用JSX必须:
- 给文件一个.tsx扩展名
- 启用jsx选项
1 | // as操作符 |
装饰器
装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上。 装饰器使用 @expression这种形式,expression求值后必须为一个函数,它会在运行时被调用,被装饰的声明信息做为参数传入。
一个@sealed装饰器,这样定义sealed函数:
1 | function sealed(target) { |
装饰器工厂
1 | function color(value: string) { |
装饰器组合
- 书写在同一行上:
1 | x |
- 书写在多行上:
1 |
|
1 | function f() { |
装饰器求值,类中不同声明上的装饰器将按以下规定的顺序应用:
- 参数装饰器,然后依次是方法装饰器,访问符装饰器,或属性装饰器应用到每个实例成员。
- 参数装饰器,然后依次是方法装饰器,访问符装饰器,或属性装饰器应用到每个静态成员。
- 参数装饰器应用到构造函数。
- 类装饰器应用到类。
类装饰器
1 | function sealed(constructor: Function) { |
方法装饰器
1 | function enumerable(value: boolean) { |
访问器装饰器
1 | function configurable(value: boolean) { |
属性装饰器
1 | import "reflect-metadata"; |
参数装饰器
1 | import "reflect-metadata"; |
Mixins
1 | // Disposable Mixin |
三斜线指令
三斜线指令是包含单个XML标签的单行注释。 注释的内容会做为编译器指令使用。
三斜线指令仅可放在包含它的文件的最顶端。 一个三斜线指令的前面只能出现单行或多行注释,这包括其它的三斜线指令。 如果它们出现在一个语句或声明之后,那么它们会被当做普通的单行注释,并且不具有特殊的涵义。
1 | /// <reference path="..." /> |
/// <reference types="..." />
与 /// <reference path="..." />
指令相似,这个指令是用来声明 依赖的;
一个 /// <reference types="..." />
指令则声明了对某个包的依赖。
/// <reference no-default-lib="true"/>
这个指令把一个文件标记成默认库
/// <amd-module />
默认情况下生成的AMD模块都是匿名的