TypeScript是一种在编译期进行静态类型分析的强类型语言。拥有一个语言服务层为开发者提供更好的工具。JavaScript兼容。TypeScript是JavaScript的超集,任何合法的JavaScript程序都是合法的TypeScript程序。Class的对象、接口和模块。TypeScript程序通常将设计阶段和运行阶段分开。TypeScript的新特性仅对设计时代码design time code有效,而对于执行时代码excution time code则通过代码转换(转换为JavaScript代码)和类型擦除将之转换为纯净的JavaScript代码。ECMAScript规范。在TypeScript里存在两种声明空间:类型声明空间与变量声明空间。
TypeScript为JavaScript增加了可选的静态类型说明,用以约束函数、变量、属性等程序实体。以便编译器和相应的开发工具可以在开发过程中提供更好的正确性校验和帮助提示。
可选的静态类型声明optional static type notation在变量的后面并且以冒号分隔:
JavaScript的基本类型在TypeScript中都有对应的类型:
numberstringbooleansymbol,是ES6新增的数据类型,在编译目标是ES5及以下时会报错。由于只能通过Symbol函数生成,可以通过类型推断确定类型,无需特别声明变量为symbol类型。undefined和null,是所有其他类型的子类型,可以赋值给任何其他类型的变量。在tsconfig中开启了strictNullChecks,那么undefined和null就只能赋值给void或any类型变量以及它们自身类型的变量。any类型,表示任何JavaScript值。any类型即是类型系统的顶级类型(全局超级类型),又是bottom type(任何类型的subtype),是类型系统的一个逃逸舱。
可以将在编程阶段还不清楚类型的变量指定为any类型。另外,any类型是与现有代码一起工作时的一种高效的方式。any类型也可以用于只知道一部分类型的情况,例如一个混合了各种类型的数据(Array<any>)。
TypeScript3.0引入的另一种顶级类型。与any相比,unknown是类型安全的。任何值都可以赋给unknown类型,但是unknown类型在被类型断言或者基于控制流的类型细化之前,不能赋值给除了any类型和unknown类型本身以外的类型。
void类型与any类型相反,表示没有任何类型。当一个函数没有返回值时,其返回值类型是void。
void类型只能被赋值为undefined和null。
never用于表示永远不会存在的值的类型。never是任何类型的子类型,但没有类型是never的子类型。
never类型常用于以下情况:
object表示非原始类型,即除number,string,boolean,symbol,null或undefined之外的类型。与any类似,可以在编译时可选择地包含或移除类型检查。但是object类型只允许被赋值为任意类型,但是不能够调用任意方法,即使它真的有这些方法。
TypeScript编译器由以下几个部分组成:
Scanner扫描器Parser解析器Binder绑定器Checker检查器Emitter发射器