Ts与Js的区别

上一篇文末介绍到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创建数组:
在这里插入图片描述
TS创建数组:
两种方式
在这里插入图片描述

函数声明的不同:

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非但不能提高项目的安全性和严谨性,反而会给自己挖很多坑。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平