# Type Challenges

Various solutions to [Type Challenges](https://github.com/type-challenges/type-challenges) implemented with TypeBox

## Overview

This test suite is used to stress test the TypeBox syntax engine

```typescript
const Input = Type.Script(`{
  x: string
  y: number
  z: boolean
}`)

const Output = Type.Script({ Input }, `Input extends {
  x: infer X,
  y: infer Y,
  z: infer Z
} ? [X, Y, Z] : never`) // [string, number, boolean]
```

## Solutions

| Challenge                                                                                                                                     | Solution      |
| :--                                                                                                                                           | :--           |
| [00003-medium-omit](https://github.com/type-challenges/type-challenges/tree/main/questions/00003-medium-omit)                                 | [Solution](https://tsplay.dev/W4oZ7m) |
| [00004-easy-pick](https://github.com/type-challenges/type-challenges/tree/main/questions/00004-easy-pick)                                     | [Solution](https://tsplay.dev/NaK8pW) |
| [00005-extreme-readonly-keys](https://github.com/type-challenges/type-challenges/tree/main/questions/00005-extreme-readonly-keys)             | [Solution](https://tsplay.dev/WzJ4QW) |
| [00007-easy-readonly](https://github.com/type-challenges/type-challenges/tree/main/questions/00007-easy-readonly)                             | [Solution](https://tsplay.dev/mx1vzW) |
| [00008-medium-readonly-2](https://github.com/type-challenges/type-challenges/tree/main/questions/00008-medium-readonly-2)                     | [Solution](https://tsplay.dev/wQk6jm) |
| [00009-medium-deep-readonly](https://github.com/type-challenges/type-challenges/tree/main/questions/00009-medium-deep-readonly)               | [Solution](https://tsplay.dev/N5r8dm) |
| [00010-medium-tuple-to-union](https://github.com/type-challenges/type-challenges/tree/main/questions/00010-medium-tuple-to-union)             | [Solution](https://tsplay.dev/ND36jw) |
| [00011-easy-tuple-to-object](https://github.com/type-challenges/type-challenges/tree/main/questions/00011-easy-tuple-to-object)               | [Solution](https://tsplay.dev/m0r9Dw) |
| [00014-easy-first](https://github.com/type-challenges/type-challenges/tree/main/questions/00014-easy-first)                                   | [Solution](https://tsplay.dev/wEXr3W) |
| [00015-medium-last](https://github.com/type-challenges/type-challenges/tree/main/questions/00015-medium-last)                                 | [Solution](https://tsplay.dev/mZA6DN) |
| [00016-medium-pop](https://github.com/type-challenges/type-challenges/tree/main/questions/00016-medium-pop)                                   | [Solution](https://tsplay.dev/Nde6Mm) |
| [00018-easy-tuple-length](https://github.com/type-challenges/type-challenges/tree/main/questions/00018-easy-tuple-length)                     | [Solution](https://tsplay.dev/N7rZrw) |
| [00043-easy-exclude](https://github.com/type-challenges/type-challenges/tree/main/questions/00043-easy-exclude)                               | [Solution](https://tsplay.dev/NrAqVw) |
| [00057-hard-get-required](https://github.com/type-challenges/type-challenges/tree/main/questions/00057-hard-get-required)                     | [Solution](https://tsplay.dev/N9rZqm) |
| [00059-hard-get-optional](https://github.com/type-challenges/type-challenges/tree/main/questions/00059-hard-get-optional)                     | [Solution](https://tsplay.dev/mMG66w) |
| [00062-medium-type-lookup](https://github.com/type-challenges/type-challenges/tree/main/questions/00062-medium-type-lookup)                   | [Solution](https://tsplay.dev/w6rZyw) |
| [00089-hard-required-keys](https://github.com/type-challenges/type-challenges/tree/main/questions/00089-hard-required-keys)                   | [Solution](https://tsplay.dev/WPnlkN) |
| [00090-hard-optional-keys](https://github.com/type-challenges/type-challenges/tree/main/questions/00090-hard-optional-keys)                   | [Solution](https://tsplay.dev/w887Mw) |
| [00213-hard-vue-basic-props](https://github.com/type-challenges/type-challenges/tree/main/questions/00213-hard-vue-basic-props)               | [Solution](https://tsplay.dev/Nl4ORN) |
| [00268-easy-if](https://github.com/type-challenges/type-challenges/tree/main/questions/00268-easy-if)                                         | [Solution](https://tsplay.dev/wRv6xw) |
| [00274-extreme-integers-comparator](https://github.com/type-challenges/type-challenges/tree/main/questions/00274-extreme-integers-comparator) | [Solution](https://tsplay.dev/wXBEOm) |
| [00459-medium-flatten](https://github.com/type-challenges/type-challenges/tree/main/questions/00459-medium-flatten)                           | [Solution](https://tsplay.dev/NVz6GN) |
| [04484-medium-istuple](https://github.com/type-challenges/type-challenges/tree/main/questions/04484-medium-istuple)                           | [Solution](https://tsplay.dev/Wo2KPm) |
| [04499-medium-chunk](https://github.com/type-challenges/type-challenges/tree/main/questions/04499-medium-chunk)                               | [Solution](https://tsplay.dev/mqbjdW) |
| [04518-medium-fill](https://github.com/type-challenges/type-challenges/tree/main/questions/04518-medium-fill)                                 | [Solution](https://tsplay.dev/w2rZjw) |
| [05153-medium-indexof](https://github.com/type-challenges/type-challenges/tree/main/questions/05153-medium-indexof)                           | [Solution](https://tsplay.dev/NBqZnw) |
| [05310-medium-join](https://github.com/type-challenges/type-challenges/tree/main/questions/05310-medium-join)                                 | [Solution](https://tsplay.dev/mbJ6om) |
| [05317-medium-lastindexof](https://github.com/type-challenges/type-challenges/tree/main/questions/05317-medium-lastindexof)                   | [Solution](https://tsplay.dev/mAbZ4W) |
| [05360-medium-unique](https://github.com/type-challenges/type-challenges/tree/main/questions/05360-medium-unique)                             | [Solution](https://tsplay.dev/mpBJXw) |
| [05821-medium-maptypes](https://github.com/type-challenges/type-challenges/tree/main/questions/05821-medium-maptypes)                         | [Solution](https://tsplay.dev/m39Z2w) |
| [07544-medium-construct-tuple](https://github.com/type-challenges/type-challenges/tree/main/questions/07544-medium-construct-tuple)           | [Solution](https://tsplay.dev/wXB6Dm) |
| [07561-extreme-subtract](https://github.com/type-challenges/type-challenges/tree/main/questions/07561-extreme-subtract)                       | [Solution](https://tsplay.dev/wOY6Em) |
| [08640-medium-number-range](https://github.com/type-challenges/type-challenges/tree/main/questions/08640-medium-number-range)                 | [Solution](https://tsplay.dev/mLeZaW) |
| [08804-hard-two-sum](https://github.com/type-challenges/type-challenges/tree/main/questions/08804-hard-two-sum)                               | [Solution](https://tsplay.dev/w1rg8N) |
| [09160-hard-assign](https://github.com/type-challenges/type-challenges/tree/main/questions/09160-hard-assign)                                 | [Solution](https://tsplay.dev/WKjE8m) |
| [09384-hard-maximum](https://github.com/type-challenges/type-challenges/tree/main/questions/09384-hard-maximum)                               | [Solution](https://tsplay.dev/WJJERW) |
| [26401-medium-json-schema-to-typescript](https://github.com/type-challenges/type-challenges/tree/main/questions/26401-medium-json-schema-to-typescript) | [Solution](https://tsplay.dev/w2rY4w) |
| [27932-medium-mergeall](https://github.com/type-challenges/type-challenges/tree/main/questions/27932-medium-mergeall)                         | [Solution](https://tsplay.dev/NBqEkw) |
| [27958-medium-checkrepeatedtuple](https://github.com/type-challenges/type-challenges/tree/main/questions/27958-medium-checkrepeatedtuple)     | [Solution](https://tsplay.dev/mbJRBm) |
| [28143-hard-optionalundefined](https://github.com/type-challenges/type-challenges/tree/main/questions/28143-hard-optionalundefined)           | [Solution](https://tsplay.dev/mAbEQW) |
| [29650-medium-extracttoobject](https://github.com/type-challenges/type-challenges/tree/main/questions/29650-medium-extracttoobject)           | [Solution](https://tsplay.dev/mpB7pw) |
| [30301-medium-isodd](https://github.com/type-challenges/type-challenges/tree/main/questions/30301-medium-isodd)                               | [Solution](https://tsplay.dev/m39n3w) |
