TypeScript
解决JavaScript类型系统的问题
类型系统
强类型与弱类型(类型安全)
静态类型与动态类型(类型检查)
它们分别从类型安全与类型检查两个维度去区分了不同的编程语言
强、弱类型区别
- 强类型–语言层面限制函数的实参类型必须与形参类型相同。
- 弱类型–语言层面不会限制实参的类型。
- 由于这种强弱类型之分根本不是某一个权威机构的定义。
- 强类型有更强的类型约束,而弱类型中几乎没有什么约束。
- 强类型语言中不允许任意的数据隐式类型转换。
- 弱类型语言中允许任意的数据隐式类型转换。
运行阶段出现报错的语法错误,不是强类型,强类型的语言层面指的是语法上就是错误的,不用运行就会报错。
变量类型允许随时改变的特点,不是强弱类型的差异。
静态、动态类型区别
- 静态类型–一个变量声明时它的类型就是明确的。声明过后,它的类型就不允许再修改。
- 动态类型–运行阶段才能够明确变量的类型,而且变量的类型随时可以改变。其实,动态类型语言中的变量没有类型,变量当中存放的值是有类型的。JavaScript就是一门动态类型的语言。
弱类型问题
- JavaScript语言是一门动态的语言,所以在享受灵活多变的优势时,缺失了类型系统的可靠性。
原因:1.语言特点,语言设计时没有考虑JavaScript能发展成如今这种“盛况”,且早起应用简单,加入类型校验显得多余。2.JavaScript是脚本语言,没有编译环节,所以设计成静态类型语言没有意义的,因为JavaScript根本不会编译(静态语言,会在编译时检查语法,不用等到运行时才抛出语法错误)。 举个栗子:JavaScript中对象的属性名会自动转化为字符串类型–体现出了弱类型的语言特点。
强类型优势
- 错误更早暴露 – 可能在编码阶段消灭一大堆语法异常。
- 代码更智能,编码更准确 – 比如使用编辑器时JavaScript中的智能提示,但是有时编辑器的智能提示识别不出来一个变量中具体的成员,因为不知道这个变量的类型。而使用强类型的话,编辑器时时刻刻都能知道每一个变量的类型,所以可以提供更准确的智能提示。
- 重构更牢靠 – 比如修改两个月前定义个一个对象当中的属性名,可以快速定位哪些地方用到了这个对象的该属性(一旦修改名称,用到的地方就会报错,可以快速定位到)。
- 减少不必要的类型判断
待更新…
|