TypeScript-起步——JavaScript简介(二)

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情

③ 类型带来的问题

  1. 首先你需要知道,编程开发中我们有一个共识:错误出现的越早越好

    • 能在写代码的时候发现错误,就不要在代码编译时再发现(IDE的优势就是在代码编写过程中帮助我们发现错误)。
    • 能在代码编译期间发现错误,就不要在代码运行期间再发现(类型检测就可以很好的帮助我们做到这一点)。
    • 能在开发阶段发现错误,就不要在测试期间发现错误,能在测试期间发现错误,就不要在上线后发现错误。
  2. 现在我们想探究的就是如何在代码编译期间发现代码的错误:

    • JavaScript可以做到吗?不可以,我们来看下面这段经常可能出现的代码问题。

      function foo(message) {
        console.log(message.length);
      }
      
      foo('Hello TypeScript!') // 17
      foo(123456789) // undefined
      foo() // TypeError: Cannot read properties of undefined (reading 'length')
      复制代码

      注意,上面的代码就可以看出JavaScript存在的问题:

      • 问题一:没有对类型进行校验
      • 问题二:没有对是否传入参数进行校验

④ 类型错误

  1. 这是我们一个非常常见的错误:

    • 这个错误很大的原因就是因为JavaScript没有对我们传入的参数进行任何的限制,只能等到运行期间才发现这个错误;
    • 并且当这个错误产生时,会影响后续代码的继续执行,也就是整个项目都因为一个小小的错误而深入崩溃;
  2. 当然,你可能会想:我怎么可能犯这样低级的错误呢?

    • 当我们写像我们上面这样的简单的demo时,这样的错误很容易避免,并且当出现错误时,也很容易检查出来;
    • 但是当我们开发一个大型项目时呢?你能保证自己一定不会出现这样的问题吗?而且如果我们是调用别人的类库,又如何知道让我们传入的到底是什么样的参数呢?
  3. 但是,如果我们可以给JavaScript加上很多限制,在开发中就可以很好的避免这样的问题了:

    • 比如我们的getLength函数中str是一个必传的类型,没有调用者没有传编译期间就会报错;
    • 比如我们要求它的必须是一个String类型,传入其他类型就直接报错;
    • 那么就可以知道很多的错误问题在编译期间就被发现,而不是等到运行时再去发现和修改;