从typescript小白到给Anthony Fu大佬的type-challenges贡献题目的感悟

1,073 阅读5分钟

初见typescript

实话说,作为一名前端开发,学习typescript有些晚,虽然经常在各种地方能看到它的身影,但是直到今年下半年我才真正开始了学习typescript的旅程。

最开始是在B站搜了些简单的教程,对基础的用法有了认知,对于它给前端带来的革新体验和规范并没有很深的理解。

进阶学习

凑巧的是,之前有加入崔大的学习群崔学社,崔大在写min-vue的时候有对typescript的需求,于是他就操办了typescript官方文档直播带读活动(群里很卷,学习氛围很好,经常会有学习活动),带读活动一共举办了两期,活动规则要求每天都把学习成果输出成文章,不得不说,有输出之后我对很多基础的知识点有了很多不一样的感悟。

也就是在第二期活动的最后,我认识了type-challenges这个很秀的开源刷题库。

image.png

type-challenges

是Anthony Fu大佬的杰作,很新颖,题目也都很巧妙,每刷一题让人有一种“原来typescript还有这样的操作!”的体验,被大家称作类型体操的圣地!哈哈哈,开个玩笑,不过真的值得一刷,各种类型的题目都有

image.png

有很多都是对js原生方法或者一些周边一些工具函数库的typescript版本的实现,说真的,刷题之前,我从来没想过typescript还能实现Array的pop、push、unshift、includes甚至数组扁平化flatten和斐波那契数列,String的startsWith、indexOf、trim甚至驼峰命名的转换。

很有趣,我从十一月份开始每天刷几道题,现在已经把hard的一半刷完了,对typescript有了很多的理解,从hard部分开始也有了很多在实际项目中的typescript类型定义挑战 比如实现一个simpleVue的类型

image.png

函数柯里化的类型定义

image.png

还有最近的状态管理新秀pinia的简单版的类型定义

image.png

在每道题里都可以链接到相应的挑战代码广场和题解列表,很方便顺畅。

出题心得

刷了这么多题,就会越来越有一些想出题的冲动,可是已经有这么多了题了,该怎么出呢,经过我的不懈努力,最后成功的贡献了五道题目(split那个题没看清后面有人已经出过了,我就自行关闭了)

image.png

题目链接

没错,相信大家也能看见这个项目是通过issues贡献题目的,还通过github-actions自动创建了pr,最后Anthony Fu大佬审核一下pr,然后就贡献成功了!

话不多说了,相信有的小伙伴已经心动了,下面我就分享一下,我是通过哪些途径来寻找出题思路的:

  1. 首先,在刷题过程中,我总会需要多个步骤去解题,而且有很多抽离出来想覆用的步骤,其实经过一些调整,让类型操作变得更加通用,就可以得到很好的一个题目,比如:

    image.png

    在写这道实现Enum枚举类型的题目时,我就想用一个可以获取元素在数组中坐标的方法(类似于js中的indexOf),然后我就萌生了这完全可以封装成一个通用的泛型类型题目的想法,话不多说,我浏览了下题目列表,好家伙,还真没有IndexOf这个题目,激动的心,颤抖的手,直接开撸

    image.png

    根据issues模板我准备好了题目简介以及测试用例,值得注意的是,在issues引导里,可以选择中文或者英文的新题目,为了通用性,我选择了英文的(顺便学习英语哈哈),然后按照相对应的区域,填写我的新题目的内容,提交issues!不一会,git-actions机器人便创建好了pr,等待Anthony Fu大佬审核通过,贡献题目到手!

    诶?等等为什么首页共建者里没有我,原本激动的我刷新了好几遍,还是找不见我的头像……

    经过我的一番验证,我发现这个pr是由机器人从issues引用后发起的,最后由Anthony Fu大佬合并,在提交代码的记录里是不经过我的……哭了,不过没关系,我看了下共建者大多数都是提供了题目的各种语言版本的翻译。

    这个简单,等之后我再对我贡献的题目提供中文版本就可以了,最后也成功加入了共建者的行列。

  2. 除了上面这种在实际中找到需求的,还有就是照搬现成的js方法,虽然说已经实现了很多了,但是总有漏网之鱼,就算js原生中没有,那也有很多丰富的js工具函数库呀,大名鼎鼎的Lodash中那成百上千的函数正等着你发掘,当然都得先经过自己的验证能实现后才可以进行贡献题目,像我之后贡献的Without、Unique、Intersection都是从Lodash中找的题目,相信想贡献题目的小伙伴已经迫不及待了,快去打开Lodash检索吧。

贡献题目的好处

  • 最直接的好处就是,拿到开源库的Contributor身份,这个库目前为止可是已经有11k的stars了,写在简历上还是比较香的。
  • 这个库面向的是全世界的typescript开发者,有很多大佬会实时去刷新贡献的题目,我就已经发现了好几个比我原始的实现巧妙很多的题解了,真的也是学到了!

最后

差不多也就到这里了,给开源库贡献总之是不会有坏处的,期待你也加入到开源的队伍中来!

友情链接