typescript类型体操我也能跳了
前言
在当今前端圈内,如果你如果还不会 typescript,那么你就不是一名合格的前端工程师。有的人说 typescript 有啥难的,不会的直接使用 any替代,AnyScript 就完事了。
如果你使用了 any,那其实跟使用 JavaScript 写代码并没有什么区别。
那 typescript 相对于 JavaScript 都有哪些区别呢:
typescript | javascript |
---|---|
JavaScript 的超集用于解决大型项目的代码复杂性 | 一种脚本语言,用于创建动态网页。 |
可以在编译期间发现并纠正错误 | 作为一种解释型语言,只能在运行时发现错误 |
强类型,支持静态和动态类型 | 弱类型,没有静态类型选项 |
可以在编译期间发现并纠正错误 | 作为一种解释型语言,只能在运行时发现错误 |
最终被编译成 JavaScript 代码,使浏览器可以理解 | 可以直接在浏览器中使用 |
支持模块、泛型和接口 | 不支持模块,泛型或接口 |
通过对比我们可以发现:
- 使用 ts 更容易发现代码 bug。 js 是动态语言,要运行的时候才能发现程序错误,而 ts 要编译后才能使用,在编译时如果有类型错误就会被编译器发现。
- 代码可预测。 JavaScript 的变量可以赋予任何类型的值。有时候,我们会看到一个变量在执行的过程中变成各种各样的类型,一会是字符串,一会是对象,非常不好预测,尤其是有复杂条件判断的时候。但在 typescript 中,变量一旦确立了类型就不能被改变,这样的变量就具有可预测性
- 此外,主流的 IDE 都支持 typescript 代码提示和自动补全
为什么 typescript 能比 JavaScript 强大这么多?主要是因为 typescript 具有完备的类型系统。可以说,学 ts,主要就是学习 ts 的类型系统。
ts 的类型系统主要分为下面3类:
- 简单的类型系统
- 泛型的类型系统
- 类型编程的类型系统(类型体操)
简单的类型和泛型更偏基础,基本每个学过ts的人都接触过,这里就不多介绍了。如果你还不是很了解,可以看下这篇文章: typescript史上最强学习入门文章(2w字)
类型编程(类型体操)
类型编程是针对类型参数,也就是泛型(类型参数)来说的,传入类型参数,经过一系列类型运算逻辑后,返回新的类型就叫做高级类型。这是ts的强大之处,也是复杂之处。类型编程在许多类库中都是必不可少的,因为只有把类型编程写好了,使用者在使用类库的时候才能在IDE中获取到代码提示
如果你对你的类型编程很有兴趣,可以在空余时间刷刷 type-challenges 。如果能把里面的题目都搞懂,那我相信今后任何ts类型体操相关的题目都无法再难住你了。
类型体操做多了之后,你就会发现所有的类型体操基本都可以用下面几个方法来实现:
使用模式匹配提取值
重新构造生成新的类型
循环递归
使用数组长度作为计数
分布式条件运算
参考文献
typescript类型体操我也能跳了
http://example.com/2023/03/26/typescript/