Currently maintaining a very large codebase in TS, and never going back to vanilla.
The initial migration found hundreds of bugs, typos, imperfections. And now every refacto, bugfix, new features... can be trusted.
More than that, when you use JS in the back and the front, your types can follow from the database, to the api, to react... even to your integration tests or your public SDK.
Add one more column in your DB and suddenly 1000 errors pops, but those are good errors, you just have to follow them until nothing scream and you have done a perfect migration.
It can feels negative at first but it is actually very pleasant and reassuring, like having an angel watching over your code.
More than that, when you use JS in the back and the front, your types can follow from the database, to the api, to react... even to your integration tests or your public SDK.
Add one more column in your DB and suddenly 1000 errors pops, but those are good errors, you just have to follow them until nothing scream and you have done a perfect migration. It can feels negative at first but it is actually very pleasant and reassuring, like having an angel watching over your code.