How to type functions...
https://2ality.com/2020/04/typing-functions-typescript.html
Constraining params (interesting)
https://www.typescriptlang.org/docs/handbook/2/functions.html
Overload signatures (call same function 2+ different ways)
https://www.typescriptlang.org/docs/handbook/2/functions.html#function-overloads
Using THIS in a function (signature)
https://www.typescriptlang.org/docs/handbook/2/functions.html#declaring-this-in-a-function
If you need to support different function signatures (by passing in an instance of something), don't use overloads, use this
instead. TS has great support for that.