为何说TypeScript在前端领域中越来越重要

TypeScript作为前端领域的第二门语言,随着前端领域的快速发展,未来TypeScript可能会成为前端技能的必备。原因很简单,JavaScript自身存在类型系统不足的问题,在长周期开发的大型项目中,有很多的隐患。

本文先介绍语言的强类型与弱类型、静态类型与动态类型这些基础概念作铺垫,再剖析JavaScript类型系统不足的问题。

一、强类型与弱类型(从类型安全的角度划分)

区别:是否能够隐式类型转换
强类型会在语言层面限制函数的实参类型必须与形参类型相同,而弱类型在语言层面不会限制实参的类型。
即强类型语言中不允许任意的隐式类型转换,而弱类型语言则允许任意的隐式类型转换。

变量类型允许随时改变的特点,不是强弱类型的差异。如python是强类型语言,它的变量可以随时改变。

二、静态类型与动态类型 (从类型检查的角度划分)

区别:是否能够随时改变变量类型
静态类型:一个变量声明时它的类型就是明确的,声明过后,它的类型就不允许再修改。
动态类型:运行阶段才能够明确变量类型,而且变量的类型随时可以改变。

var foo = 100
foo = 'bar' //ok
console.log(foo)

动态类型语言中的变量没有类型,而变量中所存放的值是有类型的,js就是标准的动态类型语言,如上。

三、JavaScript自有类型系统的问题

  • 弱类型且动态类型【任性,缺少了类型系统的可靠性】
  • js是脚本语言,没有编译环节

小应用就很方便,但如今js已大规模运用,所以这种优势就成了短板。

(1)弱类型的问题

  • 只有在代码运行时才能检查出错误,而强类型则直接在编译时就能检查出问题。

    const obj = {
          
          }
    
    // obj.foo()
    
    setTimeout(() => {
          
          
    	obj.foo()
    },10000)
    
  • 类型不明确可能会造成函数功能发生改变

    function sum(a,b) {
          
          
        return a + b
    }
    
    console.log(sum(100,100))
    console.log(sum(100,'100'))
    
  • 弱类型会造成我们可能对对象索引器的错误用法

    const obj = {
          
          }
    
    obj[true] = 100
    
    console.log(obj['true'])
    

以上问题在代码量小时可以通过约定来避免,但项目代码量一大,可能不是所有人会遵守约定,会隐藏有很多bug,还是强类型有保障。

(2)相比于弱类型,强类型有如下优势

  • 错误更早暴露
  • 代码更智能,编码更准确(强类型的代码提示较多)
  • 重构更牢靠(如修改了一个方法后,如果是js则调用这个方法的地方不会报错,ts的话编译就会报错了)
  • 减少不必要的类型判断(强类型不用对函数的参数另外加判断,因为参数本身就有要求了)

总结:JavaScript是弱类型且动态类型的语言,自身存在类型系统不足的问题,然而TypeScript能够解决它的不足,因此,在长周期开发的大型项目中,TypeScript往往更适合作为首选的开发语言。

猜你喜欢

转载自blog.csdn.net/Bertil/article/details/118833009