3分钟了解TypeScript为什么能够弥补JavaScript类型缺陷(强类型与弱类型)

884 阅读3分钟

类型安全与类型检查

(1)类型安全

     强类型 vs. 弱类型
      不管是强类型还是弱类型,变量都有两个属性:类型和值。不管是哪一种编程语言,其中使用的变量,都既有类型,又有值。
      
      强类型:指的是程序中表达的任何对象所从属的类型都必须能在编译时刻确定,强类型则有更强的类型约束。
             即**在语言层面限制函数的是参类型必须与形参类型相同**
             
      弱类型:弱类型变量是随需改变的可以在编译过程中进行改变。弱类型几乎没有什么约束。
             即在**语言层面不会限制实参的类型**
            
      强类型语言中不允许随意的饮食类型转换,而弱类型是允许的。
      

(2)类型检查

     静态类型与动态类型
     
     静态类型语言:一个变量声明时他的类型就是明确的,在变量声明过后它的类型就不在允许修改
     
     动态类型语言:在运行阶段才能够明确变量类型,而且变量的类型随时可以发生改变。
                  动态类型语言的变量是没有类型的,而变量中存放的值是有类型的。
     
     
    var foo = 100 // 数字类型
    
    foo = 'bar' // 字符串类型

语言划分.png

JavaScript 作为弱类型语言 遇到的常见问题

JS作为弱类型语言最常见的问题:需要在运行阶段才能够发现编写代码过程中遇到的类型问题

经常会出现例如,刚开始运行和测试时无法发现异常问题,而数据的接入后,没有确定的代码类型问题才会一一展现出来。

如果初期测试没有发现问题,怎会作为一个隐患存留在代码当中。

而强类型语言则会在编写过程中就会通过语法报错发现问题,根本不会等到运行过程中才会发现问题。

在JS代码中经常会出现,当实参传入时,因为传入类型的不同,从而造成函数的作用从根本上发生了变化。 如:

function sum(a,b){
return a+b
}

sum(100+100) // 200
sum(100+'100')// 100100

当sum函数都传入数值类型则函数功能为求和,但当传入其中一个值为字符串时,函数功能就变成了拼接。

因此函数的类型不明确很可能会造成函数功能发生改变,从而给开发过程带来很大的困扰。

虽然可以通过在运行时通过约束来规范类型,但在多人改法过程中仍不能保证每个人传入的类型都是准确的。

这就是javaScript作为弱类型语言会遇到的最典型的问题。

TypeScript作为强类型的优势

  • 错误可以更早的暴露,也就是可以在编码阶段提前去消灭一大部分有可能会存在的类型异常。因为在编码阶段语言本身就会把这些类型异常暴露出来,所以就不用等到运行阶段再去查找这种错误。

  • 代码更智能,编码更准确。这是一个开发者最容易感受到的,在开发过程中的智能提示可以大大提高开发的效率。

  • 重构更牢靠。重构一般是指对我们的代码有破坏性的改造,例如删除对象当中的某个成员、或者是修改某个已经存在的成员名称。

  • 减少不必要的类型判断。

function (a:number, b:number): number { // 强类型 return a + b }