Skip to content

Collection of TypeScript type challenges with online judge

License

Notifications You must be signed in to change notification settings

maxkalavera/type-challenges

Repository files navigation

Collection of TypeScript type challenges


English | 简体中文 | 日本語 | 한국어

Intro

by the power of TypeScript's well-known Turing Completed type system

High-quality types can help improve projects' maintainability while avoiding potential bugs.

There are a bunch of awesome type utility libraries may boost your works on types, like ts-toolbelt, utility-types, SimplyTyped, etc., which you can already use.

This project is aimed at helping you better understand how the type system works, writing your own utilities, or just having fun with the challenges. We are also trying to form a community where you can ask questions and get answers you have faced in the real world - they may become part of the challenges!

Answered

Click in the item to see my answer to the challenge.

2・Get Return Type

3・Omit

4・Pick

5・Get Readonly Keys

6・Simple Vue

7・Readonly

8・Readonly 2

9・Deep Readonly

10・Tuple to Union

11・Tuple to Object

12・Chainable Options

13・Hello World

14・First of Array

15・Last of Array

16・Pop

17・Currying 1

18・Length of Tuple

20・Promise.all

43・Exclude

55・Union to Intersection

57・Get Required

59・Get Optional

62・Type Lookup

89・Required Keys

90・Optional Keys

106・Trim Left

108・Trim

110・Capitalize

112・Capitalize Words

114・CamelCase

116・Replace

119・ReplaceAll

147・C-printf Parser

151・Query String Parser

189・Awaited

191・Append Argument

213・Vue Basic Props

216・Slice

223・IsAny

268・If

270・Typed Get

274・Integers Comparator

296・Permutation

298・Length of String

300・String to Number

399・Tuple Filter

459・Flatten

462・Currying 2

472・Tuple to Enum Object

476・Sum

517・Multiply

527・Append to object

529・Absolute

531・String to Union

533・Concat

545・printf

553・Deep object to unique

599・Merge

612・KebabCase

645・Diff

651・Length of String 2

697・Tag

730・Union to Tuple

734・Inclusive Range

741・Sort

847・String Join

869・DistributeUnions

898・Includes

925・Assert Array Index

949・AnyOf

956・DeepPick

1042・IsNever

1097・IsUnion

1130・ReplaceKeys

1290・Pinia

1367・Remove Index Signature

1383・Camelize

1978・Percentage Parser

2059・Drop String

2070・Drop Char

2257・MinusOne

2595・PickByType

2688・StartsWith

2693・EndsWith

2757・PartialByKeys

2759・RequiredByKeys

2793・Mutable

2822・Split

2828・ClassPublicKeys

2852・OmitByType

2857・IsRequiredKey

2946・ObjectEntries

2949・ObjectFromEntries

3057・Push

3060・Unshift

3062・Shift

3188・Tuple to Nested Object

3192・Reverse

3196・Flip Arguments

3243・FlattenDepth

3312・Parameters

3326・BEM style string

3376・InorderTraversal

4037・IsPalindrome

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

5181・Mutable Keys

5310・Join

5317・LastIndexOf

5360・Unique

5423・Intersection

5821・MapTypes

6141・Binary to Decimal

6228・JSON Parser

7258・Object Key Paths

7544・Construct Tuple

7561・Subtract

8640・Number Range

8767・Combination

8804・Two Sum

8987・Subsequence

9155・ValidDate

9160・Assign

9775・Capitalize Nest Object Keys

Challenges

Click the following badges to see details of the challenges.

1
13・Hello World

13
4・Pick 7・Readonly 11・Tuple to Object 14・First of Array 18・Length of Tuple 43・Exclude 189・Awaited 268・If 533・Concat 898・Includes 3057・Push 3060・Unshift 3312・Parameters

68
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 3376・InorderTraversal 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

38
6・Simple Vue 17・Currying 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 9160・Assign 9775・Capitalize Nest Object Keys

14
5・Get Readonly Keys 151・Query String Parser 216・Slice 274・Integers Comparator 462・Currying 2 476・Sum 517・Multiply 697・Tag 734・Inclusive Range 741・Sort 869・DistributeUnions 925・Assert Array Index 6228・JSON Parser 7561・Subtract

By Tags
#application 12・Chainable Options 8767・Combination 6・Simple Vue 213・Vue Basic Props
#arguments 191・Append Argument 3196・Flip Arguments
#array 14・First of Array 533・Concat 898・Includes 3057・Push 3060・Unshift 15・Last of Array 16・Pop 20・Promise.all 459・Flatten 949・AnyOf 3062・Shift 3243・FlattenDepth 4425・Greater Than 5117・Without 5153・IndexOf 5310・Join 5317・LastIndexOf 5360・Unique 8767・Combination 17・Currying 1 2822・Split 5423・Intersection 8804・Two Sum 9160・Assign 9775・Capitalize Nest Object Keys 216・Slice 734・Inclusive Range 741・Sort 925・Assert Array Index
#built-in 4・Pick 7・Readonly 43・Exclude 189・Awaited 3312・Parameters 2・Get Return Type 3・Omit 20・Promise.all
#deep 9・Deep Readonly 553・Deep object to unique 956・DeepPick
#infer 3312・Parameters 2・Get Return Type 10・Tuple to Union 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
#json 6228・JSON Parser
#map 62・Type Lookup 5821・MapTypes
#math 529・Absolute 2257・MinusOne 6141・Binary to Decimal 8804・Two Sum 274・Integers Comparator 476・Sum 517・Multiply
#object 599・Merge 645・Diff 2595・PickByType 2757・PartialByKeys 2759・RequiredByKeys 2852・OmitByType 2946・ObjectEntries 3188・Tuple to Nested Object 3376・InorderTraversal 4179・Flip 5821・MapTypes 2949・ObjectFromEntries 9160・Assign 9775・Capitalize Nest Object Keys
#object-keys 7・Readonly 8・Readonly 2 9・Deep Readonly 527・Append to object 2793・Mutable 7258・Object Key Paths 5・Get Readonly Keys
#promise 189・Awaited
#readonly 7・Readonly 8・Readonly 2 9・Deep Readonly 2793・Mutable
#recursion 1383・Camelize
#split 2822・Split
#string 531・String to Union 8767・Combination 2822・Split 4037・IsPalindrome
#template-literal 106・Trim Left 108・Trim 110・Capitalize 116・Replace 119・ReplaceAll 298・Length of String 529・Absolute 612・KebabCase 2070・Drop Char 2688・StartsWith 2693・EndsWith 3326・BEM style string 5140・Trunc 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 6228・JSON Parser
#this 6・Simple Vue 1290・Pinia
#tuple 18・Length of Tuple 3312・Parameters 10・Tuple to Union 3192・Reverse 3326・BEM style string 4471・Zip 4484・IsTuple 4499・Chunk 4518・Fill 7544・Construct Tuple 399・Tuple Filter 472・Tuple to Enum Object 730・Union to Tuple 2822・Split 7561・Subtract
#union 4・Pick 3・Omit 10・Tuple to Union 62・Type Lookup 296・Permutation 531・String to Union 1042・IsNever 3326・BEM style string 5117・Without 8987・Subsequence 730・Union to Tuple 1383・Camelize 5423・Intersection
#utils 268・If 1042・IsNever 5821・MapTypes 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 5181・Mutable Keys 5・Get Readonly Keys
#vue 6・Simple Vue 213・Vue Basic Props 1290・Pinia
          

By Plain Text

warm-up (1)

easy (13)

medium (68)

hard (38)

extreme (14)


Upcoming challenges

🔥 Start the challenge in TypeScript Playground

⚡️ Start the challenge in VS Code

Recommended Readings

Official

Articles

Talks

Projects / Solutions

Books

TODO

How to Contribute

There are several ways you can contribute to this project

  • Share your answers / solutions
  • Propose new challenges
  • Add more test cases to the existing challenges
  • Provide learning resources or ideas of how to solve challenges
  • Share the problems you have faced in real-world projects, regardless you having the solution or not - the community would help you as well
  • Help with others by discussion in issues
  • Contribute the infra of this project TODOs.md

Just open an issue and choose the corresponding template. Thanks!

Thanks

This project was born from solving real-world types problem with @hardfist and @MeCKodo. And great thanks to @sinoon who contributed a lot while giving early feedback on this project.

Inspired by

Contributors

License

MIT

About

Collection of TypeScript type challenges with online judge

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 98.4%
  • Other 1.6%