Typescript是必须要学习吗?如何学习TS全栈开发
pincman 人气:0Typescript目前在前端,网站,小程序中的位置基本无可替代,同时也可以构建完美的CLI应用。在移动,桌面,后端方面,性能不是要求很高的情况下完全可以胜任,并且在区块链,嵌入式,人工智能方面也开始茁壮成长。
TS的全面性
目前来说前端基本是React,Vue,Angular这三框架占据主流。而现在这三个框架对TS基本是默认支持与推荐的。
接着我们再来说说移动方面。虽然Flutter目前的流行度非常高,但是需要学习Dart语言,这就多了一个学习成本,而React Native+TS的流行度依然跟Flutter不相上下,在性能方面对比Flutter有所差距,不过既然使用这种跨平台开发,那么基本都是社交,电商等或者展示类的APP,一般不会是系统型或者超大型APP的话,这个方面RN也足够应付,如果是游戏或者系统型APP的话,我相信你也不会去选择Flutter而会直接使用原生了。
接着说说桌面应用方面,Electron框架一直在低性能要求的跨平台桌面应用这块占据主流,如果你的桌面应用是以web页面为主或者对性能要求不是非常高的话,Electron足够应付,如果对性能要求比较高的话,那么同样可以使用原生的c#,swift去开发。
在小程序方面毋庸置疑,无论是原生的微信小程序,还是跨平台的Taro,Uniapp,肯定使用JS/TS来编写的。在开发网站方面,拥有大量的SSR框架,最为占据主流的就是基于React的Nextjs和基于Vue的Nuxtjs。
而在编写后端API这部分,Node.js的性能并不比传统的PHP,Python,Ruby这类动态语言差,尤其在IO和高并发方面因为异步机制和自带Cluster集群功能,性能表现非常优秀,再加上Nestjs这种企业级的开发框架和越来越完善的生态,完全可以作为和其它动态后端语言平分秋色。
当然与Java,C#尤其是Go这种编译型的语言还是有一定差距,不过与RN,Electron一样在性能要求并不是非常高的情况下完全可以应付,而99%的应用或网站是不需要这么高的性能的。在CLI构建方面,一个Yargs基本可以扛起所有,不用多做解释。并且目前Node已经在区块链,嵌入式甚至人工智能方面的生态也已经遍地开花,以前区块链基本是go的天下,而嵌入式则是C,Rust这类占据主流,人工智能一般都是用Python。而现在大量的区块链,嵌入式的招聘中开始出现Node.js的身影。就连人工智能也出现支持Node的框架。
TS的必学性
现在来说,Typescript已经成为一门必学的编程语言。
如果你是编程入门者,建议第一门语言就选择TS,后面打算往职业后端发展可以增加学习一下Go或者Java Spring全家桶,或者往职业移动开发者方向发展,可以学习一下Swift或者Java,如果长期从事C/S系统开发,则可以尝试一下C#。
如果你已经对另一种技术栈掌握的比较深入,那么多学一门TS语言是非常有帮助的。比如说你是职业的Java Spring开发者,那么学习一下React+TS,瞬间可以成为一名全栈开发者,一个人可以把小程序,前端,APP客户端,桌面应用等通通搞定
TS目前可以做这些事
- 使用React等框架可以编写Spa应用,比如中后台,数据可视化等
- 使用Nextjs等框架可以编写SSR网站
- 使用Electron可以开发C/S类的桌面应用
- 使用React Native可以开发跨平台的移动APP
- 使用Taro等框架可以编写跨平台的小程序
- 使用Nestjs可以编写企业级高性能的后端API
- 使用Yargs可以开发CLI工具
- 并且目前已经开始在区块链,嵌入式,人工智能方面出现一些高可用的框架
如何学习TS
我个人建议的入门方法是从ES6入手先学习ES6+,这是TS的基石,必须理解了这些底层的东西,再学习JS的超集语言TS才会事半功倍。否则如果你会感觉有些东西会很难理解,比如TS的类在底层JS上本身是一个对象,函数也是一个对象,万物皆为对象。但是你像Java一样去使用就很不灵活,类其实可以手动使用对象描述构建一个。又比如把装饰器当成Java注解去理解,那么代码又变得很生硬了,其实装饰器本质上只是一个函数。还有像this
,apply
等,在ts中没有直接学习的方案,必须从JS开始
那么如果一步步把TS全部学会呢?
小编提供一下自己的学习路径供参考。
学习经历
首先小编简单介绍一下自己,我是从08年开始入手的php,前面学过delphi,从08-17年一直用的php,从18年开始转的TS,在学习TS前,JS方面只会一些简单的Jquery。我的学习路径是这样的
第一步学习ES6
看的是《阮一峰的ECMAScript6入门》这本电子书。大概浏览一遍做到心中有数后,接着学习了这本《Typescript入门教程》的电子书。
学习React
接下来就开始学习React,看的是官方文档,因为当时的官方文档默认是没有Ts示例的,所以边对着《深入理解Typescript》这本电子书查阅,边写React。期间学习了各种库,比如Redux,Mobx,React-DND,Antd,React-Spring,Echarts等等,也爬了无数的坑,谷歌了无数次,看了无数次的StackoverFlow的问答和各种库的Issue,这期间遇到的最老大难的问题就是配置vscode+eslint+prettier+stylelint,光这套学了很长一段时间。后来技术慢慢的开始熟练起来,以至于现在拿起React就变成一把利剑一样好用了,比如对于状态管理,可以直接自己写或者使用一些轻量级的Zustand等,又比如说React默认没有的keepalive功能,也是几行代码就能轻松实现。
学习Electron
在掌握了React后,又开始爬坑Electron,当然也有许许多多的问题,小编花了无数的时间和精力去解决,一开始使用的是webpack作为打包工具去编写桌面应用,后面出来了一个极好的构建工具--vite。尝试了使用vite+ts+electron+react的方式去构建,虽然当时的vite还不成熟,坑非常多,也把一个个问题通过自己思索或谷歌去解决了,随着vite的不断成熟,坑越来越少,这套技术栈也变得坚实,现在使用这套技术栈开发桌面应用已经非常熟练,足可以应付一般的业务需求。
学习Taro和React Native
因为小编家中一些原因,一段时期一直在自由职业的缘故,所以接到了一些各种各样的单子。有一次客户要求做一个SEO友好的电商网站,本来小编打算直接用熟练的jquery+laravel搞定,但是后来在各种反复考量下,小编决定采用一些新的技术栈。因为那时候,Remix还没有出来,甚至同作者的React Router v6也没发布,于是小编当时唯一的选择就是Nextjs(Gatsby太过复杂,因为我不会vue所以直接排除Nuxtjs).然后开始尝试使用Nextjs去构建这个网站,当然后端因为还没学习Node,所以依旧使用擅长的PHP去编写,没想到竟然全程基本无坑,一气呵成,可见React的基础技能对于其生态是有多重要了。。。
后面随着一个新的客户需要开发一个小程序加APP,这并不在小编的技术栈范围内,但是给出的报酬和支付订金的爽快程度前所未见,所以没办法,为了生活也只能硬着头皮上。
一开始去学微信的官方文档,但是后来客户说最好能支持某宝,小编没有精力去学习两套SDK。这时候我就开始各种搜索跨平台小程序的开发框架,找到了两个比较成熟的,一个是Uniapp,但是没有Vue开发经验再加上不喜欢他官网各种营销式的文档样式和自带的IDE,那么只能选择另一个京东出的Taro。没想到使用Taro构建小程序非常顺利,除了官方的UI丑一点外(现在Taro已经有很多好看的生态库了),基本无坑。这时,看到Taro也支持RN,于是乎抱着试一试的方式,边学习React Native,边使用Taro去构建APP,那么结果大家都知道了,坑是有多多。。。后面只能裸用React Native去写APP,坑的确少了很多,APP也开发成功了,但是唯一的缺憾是UI方面无法和小程序统一了。毕竟瑕不掩瑜,希望Taro对RN的支持会越来越好吧,后面有APP开发还是会去尝试Taro,而不是把它仅用于小程序开发。
学习Nestjs
这几年,接到的后端业务越来越多,但是因为PHP的口碑扑街(其实个人认为PHP并没这么差),很多客户也是人云亦云直接来一句PHP的不要。。。那么没办法,要么学习Java这个巨无霸体系,要么入手生态很差的Golang。一次在逛某乎的时候,看到有一名作者在布道一个node框架--Nestjs。凭我对10来年前,node刚出现时尝试过的express框架的记忆,想着node不就是slim这种微框架吗?这些项目得多累。但是鉴于当时也没有更好的选择,并且TS语言也熟悉,然后抱着试一试的心态去尝试Nestjs,没想到没试不知道,试了就知道捡到宝了。这个框架生态非常健全,ORM,消息列队,websockets,微服务等通通完美支持,然后测试了一下性能,对比swoole+symfony/laravel也不遑多让。立马拿来构建第一个项目。因为当时的nestjs还是5.0版本,问题颇多,大多集中在Typeorm方面,再加上Nestjs本身一大堆概念,比如DTO,验证器,拦截器,过滤器等等,在开发第一个CRM项目的时候还是踩了非常多的坑,导致项目延期无数次,过了半年终于把项目开发好,当然报酬也少了许多。。。但是个人认为这一切是值得的,后面就可以使用一种语言打遍天下了。
等到第二个项目来临时,Nestjs已经使用地非常成熟了,这时候遇到一个老客户,他需要一个带后台的小程序,这是我发现了一个比较好的库--lerna,可以用一种叫做monorepo的方式,把所有前后端的TS包放在一个仓库里,接口能相互调用,还能一键发布一些主应用之外的包到npm的仓库里,甚至能按照依赖顺序对TS进行编译,非常实用,所以直接使用lerna构建起了整个应用。
学习CLI构建
后面发现了更加轻量的pnpm,然后pnpm不支持lerna,但是它本身没有发布功能,并且无法按依赖顺序执行编译命令,所以在空余时间我慢慢的尝试自己编写一个命令行工具去使pnpm可以自己按顺序执行编译和一键发布。于是发现了一个好用的node的命令行工具--yargs。当然围绕yargs还发现了execa,ora等好用CLI生态库。并且同时深入整个Node重新学习了一遍,比如在使用CLI构建长时间命令式,使用fork开子进程等。同时发觉在开发时nestjs的重启速度实在太慢,于是在我的工具库里添加了一个nodemon+swc热更新nestjs的命令。
后面发现客户部署上去的Nestjs应用总是在进程出现错误后就挂掉,于是乎学习了一下cluster,使用PM2+Cluster的方式去部署应用,当然目前基本使用docker来部署了。
推荐给大家
小编以上的学习过程是非常痛苦且漫长的,花了大概2年多,因为都是普通人,并非天赋异禀。但是这么长的学习和爬坑过程,甚至还是全职的情况下,是并不是谁都有时间和精力去做的。尤其有些库遇到的各种问题去查官网文档,不仅只有英文文档,甚至大量还是语焉不详的情况下,只能不停地去查询stackoverflow以及那些库的issue,去github的discussions或者discord用英语提交问题。这会浪费大量的学习和工作时间。然后去各种QQ群提问基本就是答非所问,各种灌水,去一些问答社区提问则大概率得不到想要的答案。
所以为了帮助大家能更快的解决开发与工作中遇到的问题。小编开始做一套TS全系列的视频教程并包含各个技术栈。目前以React18和Nestjs开始制作,慢慢地涵盖所有TS的技术栈,在学习和开发过程中遇到问题也可以让小编帮助解决。但是视频教程只针对已经有一定基础的同学来进阶学习。
如果没有任何基础,可以找小编进行基础性学习,帮助你尽快地掌握这个TS开发体系。
总结
学会TS全栈开发不仅有助于提升求职竞争力,同时也可以成为一名完全自由的开发者,比起需要长期996的一端开发者来说优势不可为不大。尤其在某些编程语言和框架非常内卷的情况下,还是非常有帮助的。同时希望我个人能帮助到一些同学快速掌握这套技术栈。
加载全部内容