Skip to content

Latest commit

 

History

History
87 lines (56 loc) · 44.4 KB

README.zh-CN.md

File metadata and controls

87 lines (56 loc) · 44.4 KB

TypeScript 类型体操姿势合集
现已支持 TypeScript 4.1 🎉


English | 简体中文 | 日本語


介绍

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

高质量的类型可以提高项目的可维护性并避免一些潜在的漏洞。市面上也已经有许多优秀的类型工具库,像是 ts-toolbelt, utility-types, SimplyTyped 等等。我们也从这些项目中获取了许多灵感。

本项目意在于让你更好的了解 TS 的类型系统,编写你自己的类型工具,或者只是单纯的享受挑战的乐趣!我们同时希望可以建立一个社区,在这里你可以提出你在实际环境中遇到的问题,或者帮助他人解答疑惑 - 这些问题也可能被选中成为题库的一部分!

题库

点击下方徽章查看题目内容

1
13・Hello World

10
4・实现 Pick 7・实现 Readonly 11・元组转换为对象 14・第一个元素 18・获取元组长度 43・Exclude 189・Awaited 268・If 533・Concat 898・Includes

42
2・获取函数返回类型 3・实现 Omit 8・Readonly 2 9・深度 Readonly 10・元组转合集 12・可串联构造器 15・最后一个元素 16・出堆 20・Promise.all 62・Type Lookup 106・Trim Left 108・Trim 110・Capitalize 116・Replace 119・ReplaceAll 191・追加参数 296・Permutation 298・Length of String 459・Flatten 527・Append to object 529・Absolute 531・String to Union 599・Merge 610・CamelCase 612・KebabCase 645・Diff 949・AnyOf 1042・IsNever 1097・IsUnion 1130・ReplaceKeys 1367・Remove Index Signature 1978・Percentage Parser 2070・Drop Char 2257・MinusOne 2595・PickByType 2688・StartsWith 2693・EndsWith 2757・PartialByKeys 2759・RequiredByKeys 2793・Mutable 2852・OmitByType 2946・ObjectEntries

29
6・简单的 Vue 类型 17・科里化 1 55・Union to Intersection 57・Get Required 59・Get Optional 89・Required Keys 90・Optional Keys 112・Capitalize Words 114・CamelCase 147・C-printf Parser 213・Vue Basic Props 223・IsAny 270・Typed Get 300・String to Number 399・Tuple Filter 472・Tuple to Enum Object 545・printf 553・Deep object to unique 651・Length of String 2 730・Union to Tuple 847・String Join 956・DeepPick 1290・Pinia 1383・Camelize 2059・Drop String 2822・Split 2828・ClassPublicKeys 2857・IsRequiredKey 2949・ObjectFromEntries

12
5・获取只读字段 151・Query String Parser 216・Slice 274・Integers Comparator 462・科里化 2 476・Sum 517・Multiply 697・Tag 734・Inclusive Range 741・Sort 869・DistributeUnions 925・Assert Array Index

By Tags
#application12・可串联构造器 6・简单的 Vue 类型 213・Vue Basic Props
#arguments191・追加参数
#array14・第一个元素 533・Concat 898・Includes 15・最后一个元素 16・出堆 20・Promise.all 459・Flatten 949・AnyOf 17・科里化 1 2822・Split 216・Slice 734・Inclusive Range 741・Sort 925・Assert Array Index
#built-in4・实现 Pick 7・实现 Readonly 43・Exclude 2・获取函数返回类型 3・实现 Omit 20・Promise.all
#deep9・深度 Readonly 553・Deep object to unique 956・DeepPick
#infer2・获取函数返回类型 10・元组转合集 2070・Drop Char 55・Union to Intersection 57・Get Required 59・Get Optional 399・Tuple Filter 730・Union to Tuple 2059・Drop String 734・Inclusive Range 741・Sort
#map62・Type Lookup
#math529・Absolute 2257・MinusOne 274・Integers Comparator 476・Sum 517・Multiply
#object599・Merge 645・Diff 2595・PickByType 2757・PartialByKeys 2759・RequiredByKeys 2852・OmitByType 2946・ObjectEntries 2949・ObjectFromEntries
#object-keys7・实现 Readonly 8・Readonly 2 9・深度 Readonly 527・Append to object 2793・Mutable 5・获取只读字段
#promise189・Awaited
#readonly7・实现 Readonly 8・Readonly 2 9・深度 Readonly 2793・Mutable
#recursion1383・Camelize
#split2822・Split
#string531・String to Union 2822・Split
#template-literal106・Trim Left 108・Trim 110・Capitalize 116・Replace 119・ReplaceAll 298・Length of String 529・Absolute 610・CamelCase 612・KebabCase 2070・Drop Char 2688・StartsWith 2693・EndsWith 112・Capitalize Words 114・CamelCase 147・C-printf Parser 270・Typed Get 300・String to Number 472・Tuple to Enum Object 545・printf 651・Length of String 2 2059・Drop String 151・Query String Parser 274・Integers Comparator 476・Sum 517・Multiply
#this6・简单的 Vue 类型 1290・Pinia
#tuple18・获取元组长度 10・元组转合集 399・Tuple Filter 472・Tuple to Enum Object 730・Union to Tuple 2822・Split
#union4・实现 Pick 3・实现 Omit 10・元组转合集 62・Type Lookup 296・Permutation 531・String to Union 1042・IsNever 730・Union to Tuple 1383・Camelize
#utils268・If 1042・IsNever 55・Union to Intersection 57・Get Required 59・Get Optional 89・Required Keys 90・Optional Keys 223・IsAny 270・Typed Get 2828・ClassPublicKeys 2857・IsRequiredKey 5・获取只读字段
#vue6・简单的 Vue 类型 213・Vue Basic Props 1290・Pinia
          

即将到来的新题目

推荐读物

官方资源 (英文)

知乎专栏

文章

TODO

参与贡献

你可以通过如下几种方式参与贡献这个项目

  • 分享你的答案或解题思路
  • 提案加入新的题目
  • 完善已有题目的测试用例
  • 提供针对题目的学习资料或方法
  • 分享你在真实项目中遇到的类型问题(无论你找到答案与否)- 大家会一起帮你找到解决的思路
  • 通过在 Issue 下留言帮助他人

开一个新的 Issue 并选择相应的模板即可,感谢参与!

💡 尽管你可以使用中文进行讨论,我们还是鼓励你尝试使用英文发起 Issue 与评论,这样可以让你的问题被更多人看到也可以帮助更多人。

感谢

这个项目诞生于和 @hardfist @MeCKodo 两位朋友做的类型体操。同时也非常感谢 @sinoon 在项目初期提供了宝贵的反馈意见与参与的贡献。

贡献者

请见英文版

License

MIT