TypeScript 类型体操:48k 星的类型挑战训练场
TypeScript 类型体操:48k 星的类型挑战训练场
type-challenges 是一个 TypeScript 类型挑战集合,拿到了 48,203 个 Star:


TypeScript 的类型系统是图灵完备的,这意味着你可以在类型层面做一些非常复杂的事情。type-challenges 就是围绕这个特点设计的一套练习题,帮助你从实际操作中理解类型系统的工作原理,顺便也能巩固日常开发中用到的类型工具写法。
项目按难度把题目分成五个等级,总共大约 190 道题:
- warm-up:1 道热身题,从 Hello World 开始
- easy:13 道入门题,覆盖 Pick、Readonly、First of Array、Tuple to Object、Exclude 等基础类型工具
- medium:104 道中等题,覆盖日常开发中大部分类型场景
- hard:55 道困难题,需要对条件类型、递归类型等高级特性有扎实的掌握
- extreme:17 道极限题,涉及 Query String Parser、JSON Parser、Sum、Sort、Currying 等极端场景
所有题目都在 TypeScript 严格模式下运行。每道题都给出了类型定义和测试用例,你需要实现正确的类型来通过所有测试。
从 easy 到 extreme 的跨度
easy 级别要求你实现 Pick、Readonly、Concat、Includes 这些标准库已有的工具类型,目标是熟悉基本语法。medium 级别的 104 道题才是真正的核心,涵盖了元组操作、字符串解析、对象映射、Promise 处理等常见场景。这些中等难度的题目和日常开发关系最密切,做完之后写类型工具会顺手很多。
hard 和 extreme 级别涉及类型层面的数学运算、JSON 解析、路由匹配这类需要深度递归和类型推导的题目。其中 extreme 里有一道 Sum 题,要求在类型层面实现两个数的加法,还有一道 Sort 题,要在类型层面实现排序算法。TypeScript 的类型系统虽然是图灵完备的,但要在类型层面写一个 JSON 解析器,难度可想而知。
Playground 插件
项目提供了 TypeScript Playground 插件,安装后可以直接在浏览器里做题。对于不想搭建本地环境的人来说,这是最快的上手方式。
本地运行
克隆仓库后用 pnpm 安装依赖,运行 generate 脚本即可生成题目:
pnpm install
pnpm generate
生成的题目会放在 playground 文件夹里,用支持 TypeScript 的编辑器打开就能开始做。如果想更新题目同时保留自己的改动,可以加 --keep-changes 参数。
多语言支持
项目支持英语、中文、日语、韩语和葡萄牙语五种语言,README 有完整的翻译版本。
社区驱动
项目的题目来自真实开发中遇到的类型问题。你可以提交答案、提出新题目、补充测试用例,也可以分享自己在实际项目中遇到的类型问题。社区有活跃的讨论区,遇到不会的题目可以看别人的思路。type-challenges 从 utility-types、typescript-challenges 等项目中获得灵感,目前已经积累了大量社区贡献的代码和题目。
escript-challenges 等项目中获得灵感,目前已经积累了大量社区贡献的代码和题目。
更多推荐
所有评论(0)