V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
lichnow
V2EX  ›  程序员

为什么说 Typescript 是必学语言以及如何学会 TS 全栈开发

  •  
  •   lichnow · 2022-07-11 13:54:57 +08:00 · 3032 次点击
    这是一个创建于 895 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 目前在前端,网站,小程序中的位置基本无可替代,同时也可以构建完美的 CLI 应用。在移动,桌面,后端方面,性能不是要求很高的情况下完全可以胜任,并且在区块链,嵌入式,人工智能方面也开始茁壮成长。

    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功能,也是几行代码就能轻松实现。作为成果,我开发了一个比较完善的开源后台管理面板荼蘼(目前正在升级成 React 18)

    学习 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 全系列的视频教程并包含各个技术栈,qq 群: 455820533 。目前以 React18 和 Nestjs 开始制作,慢慢地涵盖所有 TS 的技术栈,在学习和开发过程中遇到问题也可以让小编帮助解决。但是视频教程只针对已经有一定基础的同学来进阶学习。

    如果没有任何基础,可以找小编进行基础性学习,帮助你尽快地掌握这个 TS 开发体系。

    掌握 TS 的优势

    学会 TS 全栈开发不仅有助于提升求职竞争力,同时也可以成为一名完全自由的开发者,比起需要长期 996 的一端开发者来说优势不可为不大。尤其在某些编程语言和框架非常内卷的情况下,还是非常有帮助的。同时希望我个人能帮助到一些同学快速掌握这套技术栈。

    8 条回复    2022-07-12 10:54:01 +08:00
    musi
        1
    musi  
       2022-07-11 14:01:49 +08:00
    请发推广节点
    siweipancc
        2
    siweipancc  
       2022-07-11 15:53:20 +08:00 via iPhone
    果断拉下看推广,满意的离开
    dx3759
        3
    dx3759  
       2022-07-11 17:19:52 +08:00
    没有任何范围限定,就必学。。。
    你知道 C 和 Lisp 也是必学么,学会从来没用过
    onice
        4
    onice  
       2022-07-11 17:41:52 +08:00
    目前还在学 html 和 css ,先 mark 。
    frisktale
        5
    frisktale  
       2022-07-11 17:51:40 +08:00   ❤️ 1
    一眼卖课
    iamzuoxinyu
        6
    iamzuoxinyu  
       2022-07-11 19:29:36 +08:00   ❤️ 1
    谁劝新手第一个语言学 TS 就是纯脑瘫。TS 是一门相当复杂且高级的语言,与现有其他主流语言根本不是一类。
    bthulu
        7
    bthulu  
       2022-07-12 09:22:14 +08:00
    ts 天下第一, 欢迎大家都来用 ts, 不要再用什么 C,C++,C#,JAVA,PHP,PYTHON 了, 你们能干的事, 我 TS 全包了
    woqujjfly
        8
    woqujjfly  
       2022-07-12 10:54:01 +08:00
    个人觉得楼主前面部分分析还是比较有用的 ,不过什么东西都强行和 ts 关联 ,让人一眼就知道是买课了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   986 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:31 · PVG 02:31 · LAX 10:31 · JFK 13:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.