前言
通常我们说TypeScript是Javascript的超集,也就是说它是Javascript的加强版。这里就抛出了一个问题:
Javascript原本存在什么问题,而TypeScript对其进行了改进?
Javascript是一种弱类型的动态脚本原本语言,它是没有编译环节,可直接执行的脚本语言。
而作为弱类型的动态语言,到底有什么有缺点呢?
在进行列举前,我们得对强弱类型,动态静态语言的概念有一定的了解。
一般以两个维度去划分我们的编程语言,类型安全维度及类型检查维度。
- 类型安全:强类型和弱类型。
-
一、类型安全
强类型:不允许任意的隐式类型的转换。
-
强类型语言
强类型语言也称为强类型定义语言。是一种总是强制类型定义的语言。
- 要求变量的使用要严格符合定义,所有变量都必须先定义后使用,
- 也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型。像java python c++等。
弱类型语言
而javascript是弱类型语言,而弱类型数据可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。像’2’+3 = 5一样这在强类型语言是不允许的。
javascript作为一种弱类型语言,在开发中,会存在哪些问题呢?
(1)因为弱类型问题,程序中的异常要等到运行是才能发现。
const obj = {};obj.foo();// obj.foo is not a functionsetTimeout(()=> {newObj //未定义的变量 或者方法都行},1000)
(2)因为弱类型的关系 类型不明确有可能导致我们的函数功能发生改变。
function add (a, b) {return a + b}console.log(add(1,2))// 3console.log(add(1,'2'))// 12
(3)因为弱类型的关系 会出现我们对对象索引的错误用法。
const obj = {};obj[true] = 100console.log(obj['true'])
二、类型检查
静态类型 :要求你在使用所有变量之前要声明它们的数据类型
动态类型 :执行期间才去发现数据类型的语言,与静态类型定义相反。
附上图片一张 以供参考:

三、强类型静态的优势
- 错误更早暴露,在编译阶段就能暴露。
- 代码更加智能,编码更为准确,智能提示。
- 重构更为可靠。
- 减少我们在代码层面不必要的类型判断。
