前言

通常我们说TypeScript是Javascript的超集,也就是说它是Javascript的加强版。这里就抛出了一个问题:
Javascript原本存在什么问题,而TypeScript对其进行了改进?
Javascript是一种弱类型的动态脚本原本语言,它是没有编译环节,可直接执行的脚本语言。
而作为弱类型的动态语言,到底有什么有缺点呢?
在进行列举前,我们得对强弱类型,动态静态语言的概念有一定的了解。
一般以两个维度去划分我们的编程语言,类型安全维度及类型检查维度。

  • 类型安全:强类型和弱类型。
  • 类型检查:静态类型和动态类型。

    一、类型安全

  • 强类型:不允许任意的隐式类型的转换。

  • 弱类型: 允许任意的隐式类型的转换。

    强类型语言

  • 强类型语言也称为强类型定义语言。是一种总是强制类型定义的语言。

  • 要求变量的使用要严格符合定义所有变量都必须先定义后使用,
  • 也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型。像java python c++等。

    弱类型语言

    javascript是弱类型语言,而弱类型数据可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。像’2’+3 = 5一样这在强类型语言是不允许的。

javascript作为一种弱类型语言,在开发中,会存在哪些问题呢?
(1)因为弱类型问题,程序中的异常要等到运行是才能发现。

  1. const obj = {};
  2. obj.foo();
  3. // obj.foo is not a function
  4. setTimeout(()=> {
  5. newObj //未定义的变量 或者方法都行
  6. },1000)

(2)因为弱类型的关系 类型不明确有可能导致我们的函数功能发生改变。

  1. function add (a, b) {
  2. return a + b
  3. }
  4. console.log(add(1,2))
  5. // 3
  6. console.log(add(1,'2'))
  7. // 12

(3)因为弱类型的关系 会出现我们对对象索引的错误用法。

  1. const obj = {};
  2. obj[true] = 100
  3. console.log(obj['true'])

二、类型检查

静态类型 :要求你在使用所有变量之前要声明它们的数据类型
动态类型 :执行期间才去发现数据类型的语言,与静态类型定义相反。

附上图片一张 以供参考:

为什么要学习TypeScript - 图1

三、强类型静态的优势

  1. 错误更早暴露,在编译阶段就能暴露。
  2. 代码更加智能,编码更为准确,智能提示。
  3. 重构更为可靠。
  4. 减少我们在代码层面不必要的类型判断。