Medium Challenges
Medium challenges build on the fundamentals and introduce more complex type manipulation patterns. You’ll work with recursive types, string manipulation, and advanced conditional logic.Total Challenges: 103 | Recommended for: Developers comfortable with TypeScript basics
Challenge Categories
Medium challenges are organized into several categories:Object Manipulation (15 challenges)
#3 - Omit
Remove properties from types
#8 - Readonly 2
Make specific properties readonly
#527 - Append to Object
Add properties to object types
#599 - Merge
Merge two object types
String Manipulation (20 challenges)
#106 - Trim Left
Remove leading whitespace from string types
#108 - Trim
Remove whitespace from both ends
#110 - Capitalize
Capitalize first character
#116 - Replace
Replace string patterns
Array & Tuple Operations (25 challenges)
#10 - Tuple to Union
Convert tuple to union type
#15 - Last of Array
Get last element type
#16 - Pop
Remove last element from tuple
#459 - Flatten
Flatten nested array types
All Medium Challenges
View Complete List (104 challenges)
View Complete List (104 challenges)
- #2 - Get Return Type
- #3 - Omit
- #8 - Readonly 2
- #9 - Deep Readonly
- #10 - Tuple to Union
- #12 - Chainable Options
- #15 - Last of Array
- #16 - Pop
- #20 - Promise.all
- #62 - Type Lookup
- #106 - Trim Left
- #108 - Trim
- #110 - Capitalize
- #116 - Replace
- #119 - ReplaceAll
- #191 - Append Argument
- #296 - Permutation
- #298 - Length of String
- #459 - Flatten
- #527 - Append to object
- #529 - Absolute
- #531 - String to Union
- #599 - Merge
- #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
- #4179 - Flip
- #4182 - Fibonacci Sequence
- #4260 - AllCombinations
- #4425 - Greater Than
- #4471 - Zip
- #4484 - IsTuple
- #4499 - Chunk
- #4518 - Fill
- #4803 - Trim Right
- #5117 - Without
- #5140 - Trunc
- #5153 - IndexOf
- #5310 - Join
- #5317 - LastIndexOf
- #5360 - Unique
- #5821 - MapTypes
- #7544 - Construct Tuple
- #8640 - Number Range
- #8767 - Combination
- #8987 - Subsequence
- #9142 - CheckRepeatedChars
- #9286 - FirstUniqueCharIndex
- #9616 - Parse URL Params
- #9896 - GetMiddleElement
- #9898 - Appear only once
- #9989 - Count Element Number To Object
- #10969 - Integer
- #16259 - ToPrimitive
- #17973 - DeepMutable
- #18142 - All
- #18220 - Filter
- #19749 - IsEqual
- #21104 - FindAll
- #21106 - Combination key type
- #21220 - Permutations of Tuple
- #25170 - Replace First
- #25270 - Transpose
- #26401 - JSON Schema to TypeScript
- #27133 - Square
- #27152 - Triangular number
- #27862 - CartesianProduct
- #27932 - MergeAll
- #27958 - CheckRepeatedTuple
- #28333 - Public Type
- #29650 - ExtractToObject
- #29785 - Deep Omit
- #30301 - IsOdd
- #30430 - Tower of hanoi
- #30958 - Pascal’s triangle
- #30970 - IsFixedStringLiteralType
- #34007 - Compare Array Length
- #34857 - Defined Partial Record
- #35045 - Longest Common Prefix
- #35191 - Trace
- #35252 - IsAlphabet
- #35991 - MyUppercase
Try any challenge
Open Type Challenges playground
Featured Challenges
#3 - Omit
#3 - Omit
#12 - Chainable Options
#12 - Chainable Options
#110 - Capitalize
#110 - Capitalize
#296 - Permutation
#296 - Permutation
Core Patterns for Medium Challenges
1. Deep Recursion
Process nested structures recursively:2. Template Literal Types
Manipulate string types:3. Tuple Recursion
Process arrays element by element:4. Union Distribution
Distribute operations over union members:5. Type-Level Math
Perform calculations at the type level:Tips for Medium Challenges
Master recursive types
Master recursive types
Many medium challenges require recursion. Practice with simple recursive types first:
Learn template literal patterns
Learn template literal patterns
String manipulation uses template literals extensively:
Understand union distribution
Understand union distribution
Conditional types distribute over unions automatically:
Use helper types
Use helper types
Break complex problems into smaller pieces:
Watch for edge cases
Watch for edge cases
Always test with:
- Empty arrays/strings
- Single elements
- Nested structures
- Never and unknown types
Learning Path
Next Steps
Ready for more advanced challenges?Hard Challenges
55 challenges for advanced TypeScript mastery
Template Literals
Deep dive into template literal types