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
git clone https://github.com/LearningTypeScript/projects learning-typescript-projectscd learning-typescript-projectsnpm i
shell
git clone https://github.com/LearningTypeScript/projects learning-typescript-projectscd learning-typescript-projectsnpm i
Open your editor in this project's directory:
shell
code projects/generics/treasure-hunter
shell
code projects/generics/treasure-hunter
In one terminal, run the TypeScript compiler via the tsc
script.
For example, to start the TypeScript compiler in watch mode:
shell
npm run tsc -- --watch
shell
npm run tsc -- --watch
In another terminal, run Jest via the test
script.
For example, to start tests in watch mode:
shell
npm run test -- --watch
shell
npm run test -- --watch
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
: ABuried
object (see later) ofContent
dataisFake
: A type predicate function that takes in adatum
and returns whether it isFake
isReal
: A type predicate function that takes in adatum
and returns whether it isReal
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
Buried
objects - A
NextArea
object, which can be either:- A
Catacomb
shape, with properties:inside
: ABuried
object of the same typetype
:"catacomb"
- A
TunnelSystem
shape, with properties:entrances
: An array ofBuried
objects of the same typetype
:"tunnels"
- A
- A
Treasure
object with properties:content
: Adatum
of the same typetype
:"treasure"
The collectTreasure
function should return an object with three properties:
fake
: Array of foundFake
itemsreal
: Array of foundReal
itemsscrap
: Array of all other items
Notes
Note: your terminal should be in the
treasure-hunter
directory, not the root repository's directory.
- Don't use
any
or leave any implicitany
s.