TypeScript 类型体操姿势合集



English | 简体中文


## 介绍

众所周知,TypeScript 拥有一个图灵完备的类型系统

高质量的类型可以提高项目的可维护性并避免一些潜在的漏洞。市面上也已经有许多优秀的类型工具库,像是 [ts-toolbelt](https://github.com/millsp/ts-toolbelt), [utility-types](https://github.com/piotrwitek/utility-types), [SimplyTyped](https://github.com/andnp/SimplyTyped) 等等。我们也从这些项目中获取了许多灵感。 本项目意在于让你更好的了解 TS 的类型系统,编写你自己的类型工具,或者只是单纯的享受挑战的了乐趣!我们同时希望可以建立一个社区,在这里你可以提出你在实际环境中遇到的问题,或者帮助他人解答疑惑 - 这些问题也可能被选中成为题库的一部分! ## 题库 > 点击下方徽章查看题目内容
13・Hello World


4・实现 Pick<T, K> 7・实现 Readonly<T> 11・元组转换为对象 14・第一个元素 18・获取元组长度


2・获取函数返回类型 3・实现 Omit<T, K> 8・Readonly 2 9・深度 Readonly 10・元组转合集 12・可串联构造器 15・最后一个元素 16・出堆


6・简单的 Vue 类型 17・科里化 1


5・获取只读字段
By Tags
#4.014・第一个元素 15・最后一个元素 16・出堆 17・科里化 1
#application12・可串联构造器 6・简单的 Vue 类型
#array14・第一个元素 15・最后一个元素 16・出堆 17・科里化 1
#built-in4・实现 Pick<T, K> 7・实现 Readonly<T> 2・获取函数返回类型 3・实现 Omit<T, K>
#deep9・深度 Readonly
#infer2・获取函数返回类型 10・元组转合集
#object-keys7・实现 Readonly<T> 8・Readonly 2 9・深度 Readonly 5・获取只读字段
#readonly7・实现 Readonly<T> 8・Readonly 2 9・深度 Readonly
#this6・简单的 Vue 类型
#tuple18・获取元组长度 10・元组转合集
#union4・实现 Pick<T, K> 3・实现 Omit<T, K> 10・元组转合集
#utils5・获取只读字段
## 推荐读物 ### 官方资源 - [The Typescript Handbook](https://www.typescriptlang.org/docs/handbook/intro.html) - [Unions and Intersection Types](https://www.typescriptlang.org/docs/handbook/unions-and-intersections.html) - [Literal Types](https://www.typescriptlang.org/docs/handbook/literal-types.html) - [Utility Types](https://www.typescriptlang.org/docs/handbook/utility-types.html) - [Advanced Types](https://www.typescriptlang.org/docs/handbook/advanced-types.html) ### 知乎专栏 - [来玩TypeScript啊,机都给你开好了!](https://zhuanlan.zhihu.com/c_206498766) ### 文章 > TODO ## 参与贡献 你可以通过如下几种方式参与贡献这个项目 - 分享你的答案或解题思路 - 提案加入新的题目 - 完善已有题目的测试用例 - 提供针对题目的学习资料或方法 - 分享你在真实项目中遇到的类型问题(无论你找到答案与否)- 大家会一起帮你找到解决的思路 - 通过在 Issue 下留言帮助他人 [开一个新的 Issue](https://github.com/type-challenges/type-challenges/issues/new/choose) 并选择相应的模版即可,感谢参与! > 💡 尽管你可以使用中文进行讨论,我们还是鼓励你尝试使用英文发起 Issue 与评论,这样可以让你的问题被更多人看到也可以帮助更多人。 ## 感谢 该项目启发于 - [piotrwitek/utility-types](https://github.com/piotrwitek/utility-types) - [wixplosives/typescript-type-utils](https://github.com/wixplosives/typescript-type-utils) - [psmyrdek/typescript-challenges](https://github.com/psmyrdek/typescript-challenges) - [andnp/SimplyTyped](https://github.com/andnp/SimplyTyped) 参与贡献者 > TODO ## License MIT