摸鱼酱的文章声明:内容保证原创,纯技术干货分享交流,不打广告不吹牛逼。

前言:Typescript是前端当中一门饱受争议的技术,有人爱有人恨。在本文中,我不会劝你使用或者不使用TS,而是会站在一个客观的角度,探讨TS这门技术所解决的更本质的问题(即JS类型问题)及其解决方案(TS只是其中一种)。希望阁下看完这篇文章之后,能够超脱于TS本身,看到更加本质的问题,看到更多的解决方案。之后具体用不用,就是阁下自己的事情了。

对于JavaScript类型问题和解决方案,我从个人认识出发,用脑图做了以下整理:

接下来的行文,我都会围绕这副脑图展开,如果您有兴趣继续往下看下去,我希望您能在这幅图上停留多一些时间。

好地,按照上述脑图中的逻辑,接下来我会分成以下几个部分来展开探讨本文。

JS类型问题因果

解决方案:原始

解决方案:Flow

解决方案:Typescript

一:JavaScript类型问题因果

在上面的图中,我给出了我对JavaScript类型问题的因果论断。即由于JavaScript是一门动态弱类型的语言,直接导致了JavaScript编写的程序健壮性差,容易产生类型问题。这里先列举几个日常开发当中常遇到的类型问题,而后着重解释一下什么是动态弱类型语言以及为什么这会导致JS大量的类型问题。

好的,我们先看看一些类型问题。

1.常见类型问题

运行时报错

let fn;// or import fn from 'module'

fn()// TypeError: fn is not a function

复制代码

运行不准确

// 例一

let age = 10;

let inputIncrement = '1';

age = age + inputIncrement;// 不报错,结果为"101",操蛋吧。

复制代码

潜在错误

let fn;

const callback = fn;// 不会立即出现问题,等callback被触发的时候才炸雷,操蛋吧。

复制代码

为了表述直观,我对上述列举的错误进行了简化处理。需要明白的是,这其中涉及到的几种问题只是我们日常开发当中所遇到的类型错误中的冰山一角,这一点有经验的开发者更能深刻体会。

总的来说,JavaScript更容易出现粗心代码。我们可能未必感觉到,在调试和测试阶段找到并处理这些粗心代码已经浪费了我们很多不必要的时间,尤其对于定位错误能力弱的同学来说更是操蛋,有时候艰难找到问题并发现是粗心所导致的时候恨不得扇自己一耳光。更要命的是,有些运行不准确和潜在错误的问题直到上线阶段才发现!

写过其它类型语言的人应该更会明显感觉到,自己写的JavaScript程序比自己写的其它类型语言的程序更容易出现低端错误,特别是代码量大起来之后尤其显著。

经过上面的探讨,我们已经见识了几种常见的类型问题,也即已经体验了JavaScript类型问题的恶果,接下来我们就来探讨一下JavaScript类型问题的恶因,即JavaScript语言本身是一种动态弱类型语言。在阐述他俩的因果关系之前,我们先来通过对比强类型语言和弱类型语言来理解JavaScript的弱类

typescript和java区别_Typescript也许应该这样入门才对相关推荐

  1. typescript和 java区别_typescript中interface和type的区别

    相同点 都可以描述一个对象或者函数 interface interface User { name: string age: number } interface SetUser { (name: s ...

  2. php和python和java-python与java区别

    Python和Java都是很火的编程语言,对于想学习编程的人员来说,常常被这个问题所困扰:我是该学Python还是Java呢?想要解决这个问题,还需结合自身实际情况和两种语言的特点进行分析. 以下是P ...

  3. python和java的区别-python与java区别

    Python和Java都是很火的编程语言,对于想学习编程的人员来说,常常被这个问题所困扰:我是该学Python还是Java呢?想要解决这个问题,还需结合自身实际情况和两种语言的特点进行分析. 以下是P ...

  4. JavaScript入门→HTML引用JS、变量、表达式操作符、数组Array数组对象、选择结构循环结构、函数、JavaScript与JAVA区别

    插入引用JS 变量 表达式 操作符 数组 选择判断结构 循环结构 函数 JavaScript与JAVA区别 绝学无忧. 唯之与阿,相去几何? 善之与恶,相去何若? 人之所畏,不可不畏. 荒兮其未央哉! ...

  5. python和java区别大吗-为什么入门大数据选择Python而不是Java?

    马云说:"未来最大的资源就是数据,不参与大数据十年后一定会后悔."毕竟出自wuli马大大之口,今年二月份我开始了学习大数据的道路,直到现在对大数据的学习脉络和方法也渐渐清晰.今天我 ...

  6. java语言与其他语言的区别是_Java语言特点有哪些?Java区别其他语言特点详解

    Java语言特点有哪些?Java区别其他语言特点详解 Java是目前最流行的编程语言之一,那你知道为什么Java这么火吗?相比其他编程语言,Java的特点又有哪些呢?跟着小编一起来了解一下吧. 一.简 ...

  7. js中的typeof 与typescript typeof的区别

    js中的typeof 与typescript typeof的区别 在 JavaScript 中,typeof 是一个运算符,用于返回一个值的数据类型.它可以返回下列字符串中的一个: "und ...

  8. 学习笔记:Java 并发编程①_基础知识入门

    若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 视频下载: ...

  9. Java基础-SSM之mybatis快速入门篇

    Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...

最新文章

  1. MVC案例-架构分析
  2. FD32 查询客户信贷管理中,销售值是怎么来的?
  3. Arduino PID自整定库
  4. c语言做最小公倍数,C语言用两种实现最小公倍数
  5. php百度语音合成,Drupal 与百度云语音合成(PHP SDK)的集成
  6. 4K视频直播与点播系统的搭建与体验
  7. Jetson TX2入门学习之Ubuntu默认密码
  8. SOA平台之争:Java EE,还是.NET……
  9. riscv ELF bss段解析
  10. Spring Cloud Hystrix 全解 (1) - 总览篇
  11. springboot学习(下)
  12. 中国慕课moocpython答案_中国大学慕课moocPython编程基础答案
  13. Visual Tracking Resources
  14. 用python3制作视频字幕,生成双英文双语字幕txt和srt文件使用百度和有道翻译自封装翻译接口,可以秒杀付费工具,字幕脚本为qiweb3远程 2022年5月29日
  15. AV1的CDEF过程介绍
  16. 条件概率、全概率公式和贝叶斯公式
  17. Vue之Axios AJAX封装
  18. MVP架构开发的鼠绘漫画客户端
  19. whistle安装,成功率高
  20. Ora2Pg 工具介绍

热门文章

  1. 联通光纤TCP劫持 - 基于策略的宽带信息推送系统
  2. docker与虚拟机的对比分析
  3. 2020视频面试大型翻车现场
  4. 实训四:路由器带内管理
  5. layui 查看编辑页面,radio 默认选中状态
  6. C++考试酷习题整理
  7. nginx快速配置自签SSL域名证书
  8. windows系统pyx文件转换为pyd文件或html文件
  9. 告别linux、vim下讨厌的声音提示
  10. 最新问题回答小助手工具分享