this post was submitted on 09 Feb 2024
5 points (100.0% liked)
TypeScript
825 readers
1 users here now
founded 1 year ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
view the rest of the comments
Imagine the runtime errors
This sounds like a walking runtime error just waiting to happen. Or a litany of them, if you'd so prefer. Debugging would be a nightmare and a half.
Hi - I have been using this in production for a few months now, and haven't experienced significant issues with debugging or troubleshooting.
It also helps that the library is type-safe - if we are overriding a function, we must comply with the signature of the original function for TS to pass.
Wrt. run time errors, the use of proxy does not interfere with good stack traces, if that is what you are worried about.
If we take the example in this gist where an overriden function throws an exception, we can see that the stack trace clearly shows the file (which overrides the hello function) where the exception is originating from.
In effect, the DX is not much different if you use any other mechanism for making some feature runtime configurable. In comparision to most traditional IoC/DI utilities I find the DX to actually be superior:
@Inject/@Provide
boilerplate. This is great if you are writing a library or a small utility and don't want to enforce usage of a specific DI/IoC library for your consumers.What we don't have (and likely will never) is support for things like request scoped DI or hierarchy of IoC containers. In mostly-functional TS code I have seldom missed those patterns.