ts之所以引入类型检查,就是为了在编译之前就发现代码的问题,将错误从编译报错提前,ts的所有类型都围绕这一核心观念进行设计。变量的类型必须明确,变量赋值必须与类型对应。这样虽然对开发人员要求更高了,但对老板比较友好,因为代码的错误在开发阶段就被暴露出来并修改完毕,增强了线上程序的稳定性。
ANY类型
- 对于开发者没有指定类型,ts如果无法推断出类型,ts就会认为该变量的类型是any,这会导致变量类型不明确。
- ts提供了一个编译选项noImplicitAny,打开该选项,只要推断出any类型就会报错。
- 但是,即使开了noImplicitAny选项,使用let和var声明变量的时候,如果不赋值,也不会报错,但ts会推断变量为any类型,并且可以顺利通过编译,所以,如果不复制,就一定要显示生命类型,否则可能存在安全隐患
- const命令没有上面的问题,因为js规定const声明变量时,必须同时进行初始化。
- any会引起污染问题,它会污染其他变量,它可以赋值给其他任何类型的变量(因为没有类型检查),导致其他变量在编译前无法检查出问题。
- any是ts中的顶层类型,即any包含所有其他类型