ts js es的区别
ts是js的超集,es是js的标准
ts的竞争者coffeescript,flow,eslint,tslint
- eslint,tslint和typescript一样都是用来突出语法的错误,只是没有为检查过程提供新的语法,两者都不打算作为ide集成的工具来运行。
- coffeescript想改进js,例如给js添加一些新的特性,随着时间推移,coffee反而变成了另外一种javascript,因为正在逐渐淡出大家的视野。
- flow,vue2类型检查工具就是用的flow,但是vue3已经拥抱了ts,flow是facebook的javascript类型检查工具和ide的工具语言就像ts一样,flow为js提供了一些额外的语法支持,让我们拥有一个更加丰富的类型系统。然后在编译阶段在将她清除,flow更接近ts,是一个很棒的类型系统。它与ts有着不同的目标,任何看不见的类型层系统都必须不断的做出正确的决定。
为什么要使用ts
js中每组值都有不同的行为,我们可以通过运行不同的操作来观察。例如我们声明了一个名为message的变量,并且尝试在它身上调用一个名为toLowerCase的方法,第二次我们直接尝试调用message,但是我们不知道message到底是什么,我们就无法可靠的说出尝试运行的结果。每个操作的行为完全取决于我们对message的赋值。假设messag为一个“Hello World”的字符串,那么在编译完成之后第一次尝试的结果就会输出“hello world”,但是第二次的message()就会报错,如果种错误我们完全可以避免掉,那就太好了,这就是ts存在的意义之一。
ts的静态类型检查
如上所示的message,它明明是一个字符串,但是我们却将它作为一个方法来调用,这个错误在js代码编写阶段不会有任何的提示,只有当运行阶段,它才会报错,这样代码开发会变得极其低效和不规范。而当我们使用了ts之后,ts的静态类型检测会在我们对类型进行声明定义之后,在代码的编写阶段就会指出这种错误,当然不仅如此;
const user={ name:"小千", age:"26" }; console.log(user.location)
上述代码在js运行和编译阶段都不会有任何的提示,但是location变量明明是不存在的,我们是应该知道这个错误的,而不是任由不管甚至被忽略,ts的存在的意义就又体现出来的,它同样会在代码书写阶段就进行提示报错。