为什么要学习ts?
可以减少bug
- 发现过程:在tsc过程将ts转化为js过程中会提示变量不一致问题
- ts转化的js:普通的js,只不过是已经通过了ts检查的js(没有变量问题的js)
- 常见问题:
- 变量个数不一致
- 变量类型不正确
- 变量只读属性
- 函数输入输出变量类型不统一
未来趋势
各大框架已经开始使用ts(如果再不学,以后看源码是不是会更加费力了)
ts是什么?
是新语言吗? 不是,在js基础上加了强变量类型语法,增强js语法
本质是什么? js 的超集,主要提供类型系统和对 ES6 的支持
如何运作的?
- 需要全局安装 typescript
- 通过 typescript将ts文件转化为js文件,此过程可提前发现语法缺陷
缺点?
- 学习成本,需要理解接口、泛型、类、枚举类型(
- 短期会增加开发成本,要多写类型定义,对于需要长期维护的项目, ts能减少维护成本
- 构建:集成到构建流程需要一些工作量
- 三方库:可能和一些库结合的不是很完美
优点?
- 提前发现类型相关BUG
- 代码更加规范,减少维护成本
- 增强了编辑器和 IDE 的功能,包括代码补全、接口提示、跳转到定义、重构等。
- 代码细节:枚举类型,支持通过key获取value,也支持通过value获取key
基本了解
设计者,实现者:微软
发行时间:2012年10月1日
ts和js关系:
- ts是js的扩展,也就是ts语法包含js
- 任何现有js程序都是合法的ts程序,也就是.js 文件可直接重命名为 .ts
- GitHub:github.com/microsoft/T…
安装
For the latest stable version:
sudo npm install -g typescript
npm install -g typescript@next
验证 tsc -v (@2020/3/27)
tsc -v
Version 3.8.3
执行
tsc test1_compile.ts
node test1_compile.js
观察发现 ts转换成js并没有自动类型转换代码,这是因为
- 如果有错误,编译时就会报错
- ts检查是静态的,非运行时检查
- 注: ts编译时即使报错了,还是会生成编译结果
当形参和实参类型不同时编辑器和命令行提示
// 这样不会报错
let num: number = undefined;
// 这样会报错
let u: void;
let num: number = u;
// Type 'void' is not assignable to type 'number'.