Typescript is the way.
Typescript also doesn't catch cases where metaprograming is used when calling a function. You can put anything you want in there.
I'm pretty sure your linter will catch this.
If you don't have a linter, get a linter.
I think I’ll probably get used to it, though.