一,对比二者类型系统
类型系统特性 | JavaScript | TypeScript |
类型如何绑定的? | 动态 | 静态 |
是否自动转换类型? | 是 | 多数时候否 |
何时检查类型? | 运行时 | 编译时 |
何时报告错误? | 多数在运行时 | 多数编译时 |
二,类型如何绑定??
JavaScript动态绑定类型,因此必须运行程序才能知道类型。在程序运行之前,JavaScript对于类型一无所知
TypeScript是渐进式类型语言,在编译之前,并不需要知道全部类型,即使是没有类型的程序,TypeScript也能推导出部分类型,捕获部分错误,但不全面,大量的错误会暴露给用户。
三,是否自动转换类型?
JavaScript是弱类型语言,如果执行无效的操作,例如计算一个数和一个数组的和,会进行隐式转换,开发过程中可能会因此导致难以追踪的错误。
TypeScript如果遇到这种情况,会报错,如果必须转换类型,需要表明。
四,何时检查类型?
多数情况,JavaScript不在乎使用的什么类型,会尽自己所能把提供的值转换成预期的类型。
而TypeScript会在编码时对代码做类型检查,不用运行代码,便可获得错误反馈,便于发现错误及时反馈。
五,何时报告错误?
JavaScript在运行时抛出异常或执行隐式类型转换。必须真正运行程序时才能知道有些操作是无效的
TypeScript在编译时报告句法和类型相关的错误,会在编辑器中显示,输入代码立即获得反馈。
注:仍存在大量错误TypeScript在编译时无法捕获,例如堆栈溢出,网络断连和恶意的用户输入,这种运行时的异常。