This is minor but I'm reporting it to make my PR reference an issue.
The Tree type defines a node of a tree which must have two Tree chidren. This makes it impossible for there to be leaf nodes.
type Tree<T> = {
    value: T;
    left: Tree<T>;
    right: Tree<T>;
} 
If a tree must have a child and that child can't be anything other than a tree, then that causes every child to need a child of its own. A leaf node doesn't have any children and you can't have an infinite tree, so this type wouldn't work in real code.