关于 TypeRoom

各位朋友们,你们好啊:

我是 TypeRoom 项目的建立者,这篇文档主要是用于介绍建立本站的原因、目的以及未来的计划,另外也想借此机会交一些志同道合的朋友。

TypeRoom 的起源

我相信大部分前端学习 TypeScript 过程中,会接触到各种形式的教程或资源,学习了很多但是实际工作时也就用用简单的类型定义,稍微更加深入些的内容就有点吃力了。

我个人看来造成这个问题的原因有以下两点:

  • 没有形成“惯性思维”,毕竟我们使用 JS 习惯了,其本身就是一个高度灵活自由的语言,转变到 TS 这种有类型检查的写法会有一个需要适应的过程。
  • 实际工作场景时写高级类型的机会本就不多,偶尔遇到了就去搜一搜查一查,解决了当下问题,就完事儿了。

但是你一定会有过这样的经历,遇到写不出来的类型时怎么试都无解,连描述这个问题都很困难,查都不知道怎么查,干脆最后就直接 any 一把梭,这对于一个好的项目来说简直是灾难。

有意思的是,看过社区中一些对 TypeScript 的争论,很多人都同意一个观点:如果你无法保证与你一起维护某项目的工程师的 TypeScript 水平,那么引入 TypeScript 只会让你的项目更加难以维护

还有的观点是如果你只把 TypeScript 作为给你定义的变量加上简单类型的话,也大可不必引入 TypsScript。

但是相信大部分的前端开发者都认同一个观点:TypeScript 已经势不可挡,它必定是前端技术中一个必须掌握的一个有价值的技术

所以为了不拖团队的后腿,或许也可以理解为让你更有竞争力,深入 TypeScript 的学习不得不引起你的重视。

该如何进行深入学习?就像我上面说的,你会接触到各种个样的学习资源,也许你学过了就忘了,缺少一个持续锻炼的机会。好在开源社区的大佬 antfu,创建了 type-challenges 这个造福开发者的项目,它上面有许许多多不同场景下的编写 TypeScript 工具类型的题目,如果你都能很快速度地解决上面大部分题目,你一定会是一个 TypeScript 高手!

Type Challenges 的优点我总结了下有以下几个:

  • 一问一答式,类似 leetcode 模式,给出了限定条件,做题者给出被期望的答案,简单直接,就像上学时做题目一样,那熟悉的感觉。
  • 题目有难度区分,如果你是新手,可以先尝试从简单题目开始,随着掌握程度提升,可以挑战更高的难度。
  • 涵盖场景多,如果你有浏览过这个项目的题目列表和标签分类,你会发现题目的出题能覆盖住你大部分的工作场景,如果能完整刷完,我想你已经没有解决不了的类型难题了。
  • 类型判别工具集成,此项目还有另一个仓库用于判别你写的答案符不符合预期,所有的测试用例都是基于这个判别工具库来的,你只管实现你的答案就行。

不过我个人认为有以下这个核心问题:从刷题环境、题解、交流与讨论这个开发者最关心的三个过程,还不够方便。

刷题环境

目前 Type Challenges 官方提供了三种刷题方式

这几种方式其实都很方便,不过都在题目的可读性上有一定的不足,还对开发者有一定的工具负担、IDE 负担。

针对这个问题,也是建立 TypeRoom 的第一个主要原因之一,就是提供直接在浏览器端就能刷题的在线环境,并且从技术和布局设计上让题目描述和答题区域区分开来,更为直观和清晰。不需要额外再做任何事,打开一个网址即可直接开始刷题,并且你的答题记录会存储到云端。

题解

我们刷题的时候难免会遇到自己解决不了的题目,有的题目即使写得出来但也不理解其背后的原理。所以如果有一个好的题解能给你参考,想必一定会助你更好地进步。

在 Type Challenges 下,有推荐一个专门出题解的项目 type-challenges-solutions,但是它有以下两个不太友好的地方:

  • 题解过于宽泛,不够细致。我理想中的题解应该是每个题目之间是独立的,把阅读者完全当作小白,从最基本的语法开始,循序渐进地教授刷题者其中的原理。
  • 翻译质量不够好。其官网显示支持 6 国语言,但是其中的很多题目中文翻译机翻味很重(这里我不是有意抨击各位贡献者),阅读起来特别难受。

所以也是基于以上问题,我希望 TypeRoom 能做到每个题目下,都有一个能让类型体操的初级选手也能很好理解的官方题解,当然了,纯正的中文题解。

另外如果后续成本可控,我会把用户提交的题解的功能也开放出来。

交流与讨论

刷题过程中,或许你会想要分享一些心得、与开发者们交流问题、甚至炫耀下自己今天刷了多少多少题等等,TypeRoom 都会在不久的未来支持。

一个专门交流 TypeScript 的社区,是 TypeRoom 想要提供给各位开发者的,希望大家喜欢这里的技术氛围,这种氛围也需要大家一起来维护。

TypeRoom 的未来

如你所见,TypeRoom 本质上是一个刷题网站,和 LeetCode 很相似,所以你在使用本站时会很有很熟悉的感觉。

TypeRoom 的主要目的是提供一个平台让大家更方便地刷题,提升自己的 TypeScript 编码水平,这也是我最初创建本站的初心。我真的希望能有越来越多的人加入到类型体操大队,刚好又是借助我创立的这个平台,让越来越多的开发者变得更强,我就会非常的开心。

当然了,TypeRoom 背后会有一些维护费用,比如云服务器费用等,只要还在我能承担的范围之内,且有比较可观的用户量,我都会一直迭代维护下去。

目前 TypeRoom 还有一些功能未开发,希望有志同道合的朋友,可以联系我参与此项目开发,共建一个利于广大开发者的类型小屋!你可以阅读以下文档了解:

希望大家在本站刷题刷的开心!