TypeScript 类型体操姿势合集
众所周知,TypeScript 拥有一个图灵完备的类型系统
高质量的类型可以提高项目的可维护性并避免一些潜在的漏洞。市面上也已经有许多优秀的类型工具库,像是 ts-toolbelt, utility-types, SimplyTyped 等等。我们也从这些项目中获取了许多灵感。
本项目意在于让你更好的了解 TS 的类型系统,编写你自己的类型工具,或者只是单纯的享受挑战的乐趣!我们同时希望可以建立一个社区,在这里你可以提出你在实际环境中遇到的问题,或者帮助他人解答疑惑 - 这些问题也可能被选中成为题库的一部分!
点击下方徽章查看题目内容
By Plain Text
- 4・实现 Pick
- 7・实现 Readonly
- 11・元组转换为对象
- 14・第一个元素
- 18・获取元组长度
- 43・Exclude
- 189・Awaited
- 268・If
- 533・Concat
- 898・Includes
- 3057・Push
- 3060・Unshift
- 3312・Parameters
- 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
- 3062・Shift
- 3188・Tuple to Nested Object
- 3192・Reverse
- 3196・Flip Arguments
- 3243・FlattenDepth
- 3326・BEM style string
- 3376・InorderTraversal
- 4179・Flip
- 4182・斐波那契序列
- 4260・AllCombinations
- 4425・Greater Than
- 4471・Zip
- 4484・IsTuple
- 4499・Chunk
- 4518・Fill
- 4803・Trim Right
- 5117・去除数组指定元素
- 5140・Trunc
- 5153・IndexOf
- 5310・Join
- 5317・LastIndexOf
- 5360・Unique
- 5821・MapTypes
- 7258・ObjectKeyPaths
- 7544・Construct Tuple
- 8640・Number Range
- 8767・Combination
- 8987・Subsequence
- 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
- 4037・IsPalindrome
- 5181・Mutable Keys
- 5423・Intersection
- 6141・Binary to Decimal
- 7258・Object Key Paths
- 8804・Two Sum
- 9155・ValidDate
✨ 即将到来的新题目
TODO
你可以通过如下几种方式参与贡献这个项目
- 分享你的答案或解题思路
- 提案加入新的题目
- 完善已有题目的测试用例
- 提供针对题目的学习资料或方法
- 分享你在真实项目中遇到的类型问题(无论你找到答案与否)- 大家会一起帮你找到解决的思路
- 通过在 Issue 下留言帮助他人
开一个新的 Issue 并选择相应的模板即可,感谢参与!
💡 尽管你可以使用中文进行讨论,我们还是鼓励你尝试使用英文发起 Issue 与评论,这样可以让你的问题被更多人看到也可以帮助更多人。
这个项目诞生于 @hardfist 和 @MeCKodo 两位朋友做的类型体操。同时也非常感谢 @sinoon 在项目初期提供了宝贵的反馈意见与参与的贡献。
请见英文版。
MIT