declare interface List { get length(): number; removeAt(index: number): T | undefined; remove(item: T): T | undefined; get(index: number): T | undefined; add(item: T): void; } declare type GraphEdge = {to: number, weight: number}; declare type WeightedAdjacencyList = GraphEdge[][]; declare type WeightedAdjacencyMatrix = number[][]; // A number means weight declare type AdjacencyList = number[][]; declare type AdjacencyMatrix = number[][]; // A 1 means connected declare type BinaryNode = { value: T; left: BinaryNode; right: BinaryNode; } declare type GeneralNode = { value: T; children: GeneralNode[] }