DEV Community

loading...

Discussion on: TypeScript's Secret Parallel Universe

Collapse
girvo profile image
Josh Girvin

TypeScript's "secret" scope was something I was also running into, but mainly because I was moving to it from Flow.

Flow isn't shy about there being "type land" and "code land", and never-the-twain-shall-meet. I really liked that separation, but there are upsides to how TS tackles it as well: just means we need to remember things like this post every so often haha

Collapse
loilo profile image
Florian Reuschel Author

Honestly, I'm glad I'm not the only one who has hit that brick wall. I didn't learn TypeScript very linearly (i.e. I did not read the official TS manual start to finish) but I was quite surprised that until today, I've never encountered an article mentioning this distinction.

Even Ryan in his GitHub comment did not point me to any RTFM-style URL, so I suppose this concept is just implicitly accepted without anybody talking about it that much. 🤷‍♂️

Collapse
girvo profile image
Josh Girvin

That was about my experience too. The biggest thing that threw me for a loop and made me realise that there was this "mixing" of concerns going on? import-ing types as if they're actual code... but they're not code! Flow has import type { ... which is much cleaner, but Typescript is so damned useful that it's silly to not use it.

Thread Thread
loilo profile image
Florian Reuschel Author

I don't even dislike the concept of mixing things up. It's pretty neat to be able to import a class which can be used as a constructor as well as a type.

But it obviously is less transparent and really carries the risk of newbies getting burned.

Thread Thread
orta profile image
Orta

Nice! TypeScript 3.8 (in beta ATM) has import type and it would give a compiler error if you used a type-ish import (like a class) from import type in a value position

Thread Thread
loilo profile image
Florian Reuschel Author

Interesting, didn't know that. 👍

For anyone wanting to read more: TypeScript 3.8 beta announcement