Typescript是Javascript的超集,它可以编译成纯Javascript。他可以运行在任何浏览器,任何计算机和任何操作系统上,并且是开源的。
01
—
Typescript由微软创建,近年来很火,作为一个“有追求”的web前端,多少会有些涉足ts,就算工作中没有用到ts的你也许会自己动手写一些小Demo吧。用惯了Javascript之后再去使用Typescript会感觉到很麻烦,严格的数据类型,严格的返回值类型,刚接触时一堆堆的爆红信息,多少会让人极度不适,心里会想:“你报个什么鸡儿错,js都不报错你怎么不一样呢!辣鸡!”
大前端的发展趋势让我们不得不去学习TS,Vue都进军TS版了,怎么能不学习呢。我是一个典型,从一开始的不屑于学习ts,自我感觉良好,认为js这么强大就已经足够让我在开发中使用了,慢慢的,项目变得越来越大,项目组人员变得越来越多,web人员的技术层次也参差不齐,开发的代码、框架虽有约束但只是整体上的,却挡不住个人的编码习惯不同,造成后期出现问题在修复问题的过程中让人摸不着头脑。好比下边这样:
function yonghu(a){
var p = a.docName;
var url = "/xxx/xxxxx";
this.$post(url, p).then(r=>{
this.u= r.data
})
}
我的内心:yonghu?用户吧?a是啥啊?p是啥啊?哦p是参数,u又是啥啊?搜一下,卧槽全是u怎么搜啊,这代码简便的就连webpack打包的都没你简便!!
还有下边这种:
String name;
...
return name.toString();
让你维护项目看到这种代码,你骂人不?如果在js中出现类似问题,使用ts可以完美解决,不然tsc都看不惯你。
// js 返回一个字符串类型
function getString(){
let string;
string = 1;
string = "1";
string = [1];
......
string = ["1"]; // 无线赋值
return string;
}
// ts
function getString(): string{
let string: string;
// 直接接给你报错 number类型是无法赋值给string类型的
string = 1;
return string;
}
就像上述例子,js方法中返回数据是Array类型呢?如果正巧下方用到String类型的原型方法呢?是不是就爆红啦,如果前期调试没注意到,没有做类型校验,上线后出现这种情况会导致很严重的后果,而TS则在开发的过程中就已经强制性的让你解决问题。当然ts也不仅仅只有类型检查这么点功能,接口,类等高级用法也很强大。
02
—
任何语言都有利有弊,笔者认为最大的弊端为这两点:
1、开发的成本在相对于js来说要大些,毕竟严格的类型约束在开发过程中总是报错让人心烦意乱,对小白或者不太熟练的人来说是种挑战。但是一旦项目成型,开发起来会很轻松,也有利于维护。
2、与一些第三方库的接入还是不太完美,毕竟一些库的兼容性也不太好
TS,不是很完美,但是大潮流在推动着,作为自己工作内的一份技能不得不去学习尽管他暂时用不到,但是多学无妨,不管是否是开发人员,拓宽自己的视野、接受新知识一种享受是一种提升。