TypeScript介绍

摘要:# TypeScript介绍 ## 官方声明 > **JavaScript that scales。**TypeScript is a typed superset of JavaScript that compiles to plain JavaScript ## 特点 - 出自**Anders Hejlsberg**之手(C#,Delphi作者) - 兼容ES

TypeScript介绍

官方声明

JavaScript that scales。TypeScript is a typed superset of JavaScript that compiles to plain JavaScript

特点

出自**Anders Hejlsberg**之手(C#,Delphi作者)

兼容ES规范,同时也有自己的一些规范(如namespace)

自带编译器,也是TS写的

语言即服务(IDE,第三方库的方法声明等)

静态分析

输入错误

interfaceISort {name: string,  age:number}functionsortByName(a: ISort[]) {  var result = a.slice(0);  result.sort((x, y) => {returnx.name.localCompare(y.name);  });returnresult;}

执行tsc编译:

errorTS2339: Property 'localCompare' does not exist on type 'string'.

localCompare这种输入手误在没有智能提示的情况下是较为常见的,如果这个函数是原生JS,那会等到运行时才会报错。如果使用支持TS的IDE,则输入localCompare后会直接标红,避免运行时这块代码被执行到然后报错再Debug。

非空判断

function countLines(text?:string[]):number{  letcount=0;for(const lineoftext) {if(line && line.length!==0) {count=count+1;    }  }returncount;}

执行tsc编译:

errorTS2532: Object is possibly 'undefined'.

可以看到for (const line of text) {这行中的text变量是有可能为undefined的(?:是TS语法,表示存在不存在都有可能)。这种缺少非空判断到时的JS运行时错误在工作中也是容易出现的。

访问权限

classPerson{protectedname: string;  public age: number;  constructor(name: string) {this.name = name; }}classEmployeeextendsPerson{  static someAttr =1;privatedepartment: string;  constructor(name: string, department: string) {super(name);this.department = department;  }}let howard =newEmployee("Howard","Sales");console.log(howard.name);

执行tsc编译:

errorTS2445: Property 'name' is protected and only accessible within class 'Person' and its subclasses.

Person中name属性是protected类型,只能在自己类中或者子类中使用,这和Java是一样的。

interfaceMachine{  move():void}interfaceHuman{  run():void}classRobotimplementsMachine,Human{  run() {    console.log('run');  }}

执行tsc编译:

error TS2420:Class'Robot'incorrectlyimplementsinterface'Machine'.Property'move'ismissingintype'Robot'.

Robot类实现多个接口时,必须实现每个接口的所有抽象方法,这也是实现多继承的一种方法。

扩展性

TS适合大规模JS应用,正如他的官方宣传语JavaScript that scales。

类型系统+静态分析+智能感知/提示,使大规模的应用代码质量更高,更好维护。

有类似VSCode这样配套的IDE支持,方便的查看引用关系,并进行重构,再也不用全局搜索,一个个修改了。

数据结构(应用配置、前后端接口等JSON格式数据)的类型校验,和强类型的后端配合更为无缝、健壮,方便后期前后端整体迭代、重构。

超集

由于兼容ES规范,所以可以比较方便的升级现有的JS代码,逐渐的加类型注解。渐进式(容我盗个词)增强代码健壮性。不过这个也是理论上的,我目前维护的一个项目有比较重的历史包袱,模块管理是CommonJS/ES6 Modules混杂的,我尝试将编译系统从Babel完全迁移到TS,折腾后并没有成功(Babel还是很强大的= =)。

对于历史包袱比较多的老项目,不建议完全替换Babel,但是可以曲线引入TS,用TS编译到ES6,再用Babel来编译到ES5。


TypeScript介绍_第1张图片

原文链接

你可能感兴趣的:(TypeScript介绍)