Treasure Hunter
A Learning TypeScript > Generics 🍲 entree project.
Good evening, professor. We're with the National Typeological Survey. We've received word that there is a new system of catacombs and tunnels beneath your city. We'd like you to explore them.
Please submit a collectTreasure function to us that can recursively sift through buried contents.
We will provide you functions to determine what is fake, real, or general scrap.
Setup
If you haven't yet, set up the github.com/LearningTypeScript/projects repository locally.
shell
shell
Open your editor in this project's directory:
shell
shell
In one terminal, run the TypeScript compiler via the tsc script.
For example, to start the TypeScript compiler in watch mode:
shell
shell
In another terminal, run Jest via the test script.
For example, to start tests in watch mode:
shell
shell
Specification
Export a collectTreasure function.
It should have three type parameters: Content, Fake, and Real.
Fake and Real should both extend Content.
The collectTreasure function should have three runtime parameters:
- buried: A- Buriedobject (see later) of- Contentdata
- isFake: A type predicate function that takes in a- datumand returns whether it is- Fake
- isReal: A type predicate function that takes in a- datumand returns whether it is- Real
Also create and export a Buried type with a single type parameter.
Each Buried object can be one of three things:
- An array of the same type of Buriedobjects
- A NextAreaobject, which can be either:- A Catacombshape, with properties:- inside: A- Buriedobject of the same type
- type:- "catacomb"
 
- A TunnelSystemshape, with properties:- entrances: An array of- Buriedobjects of the same type
- type:- "tunnels"
 
 
- A 
- A Treasureobject with properties:- content: A- datumof the same type
- type:- "treasure"
 
The collectTreasure function should return an object with three properties:
- fake: Array of found- Fakeitems
- real: Array of found- Realitems
- scrap: Array of all other items
Notes
Note: your terminal should be in the
treasure-hunterdirectory, not the root repository's directory.
- Don't use anyor leave any implicitanys.