上一篇文末介绍到Ts程序代码与编译过后的JS文件的区别异同:
js代码:
Ts代码:
代码中最明显的区别就是Ts在定义字符串前,多了一个String.
这就是其中最大的不同:TS必须指定数据类型
js有的类型:
boolean类型、number类型、string类型、array类型、undefined、null
ts多出的类型
tuple类型(元组类型)、enum类型(枚举类型)、any类型(任意类型)
特别的类型
void类型(没有任何类型)表示定义方法没有返回值
never类型:是其他类型(包括null和undefined)的子类型,代表从不会出现的值这意味着声明never变量只能被never类型所赋值
typescript 特点
相较于js(ES6+), ts的基础有以下几大特点:
- ts是js的超集,即你可以在ts中使用原生js语法。
- ts需要静态编译,它提供了强类型与更多面向对象的内容。
- ts最终仍要编译为弱类型,基于对象的原生的js,再运行。故ts相较java/C#这样天生面向对象语言是有区别和局限的
- ts是由微软牵头主导的,其语法风格与概念主要来自C#
函数声明的不同:
JS ES5声明函数
function run3(){return 'run'}// es5匿名函数var run4 = function(){return 'run'}
TS声明函数:
// ts函数声明function run5():string{return 'run'}// ts匿名函数var run6 = function():number{return 123}
由于TS目前了解的内容还不够多,在具体使用上的区别还多很多需要归纳总结和学习。
但也是因为ECMA标准的进化,很多ts的专属特性已在原生js中落地,其中包括但不限于:
let/const 基于块级作用域的变量声明
lambda(箭头函数)
class 类
所以,除强类型与泛型等从C#引入的面向对象特性,js与ts的差异已基本被抹平。
TS的局限:
ts是js的超集,这意味着你在ts中写js是完全兼容的,这降低了ts的学习和使用门槛,保留了灵活性,但同时,ts的纯洁性无法保证。
程序是否加入类型声明,是否使用面向对象完全取决于开发者本身,而这种过分的宽容很不利于团队合作的复杂长周期开发。
如果不对ts项目进行严格的代码规范,那么使用ts非但不能提高项目的安全性和严谨性,反而会给自己挖很多坑。