You're right[0], which is weird because they got most of the way there. I guess I just assumed since they were leveraging IIFEs this would be a natural use case. I'd be interested in knowing why they didn't actually.
According to this[1] exchange on Stack Overflow, the IIFE is used by TypeScript because of other scoping issues (specifically protecting class properties before instantiation and defining interfaces).
[0] https://yakovfain.com/2015/06/30/the-private-in-typescript-i...
[1] https://stackoverflow.com/questions/56086411/why-does-typesc...