> The only big drawback of Deno is the language

Ooft. Although TypeScript does have a bit of a learning curve, and a lot of gotchas, I still have to say it's my favorite language to use. If you combine the delicious syntax-sugar of ES6 (and beyond) with a sprinkling of tasteful types, the language leaves you full and energized without feeling bloated.

TypeScript’s type system is very complex and yet fails to achieve type safety to the degree that really strict languages do.

I’m not that into class-based languages and prefer a language to have macros (more for DSLs they enable them for application code). However, even if those preferences were off the table, I’d still rather have something like Kotlin on the server than TS. It’s simpler and isn’t weighed down by 30 years of cruft.

Typescript isn't really a class-based language.

It's a language that supports both function and OO paradigms.

Also, if macros/DSLs are what you're after, then you'd probably be interested in typescript's decorators. (you can use the old experimental decorators based on the old standard from ages past, and the new *standard* decorators introduced in typescript 5 which are based on the current stage-3 ecmascript proposal).

The only things typescript as a language is really lacking are:

1. Pattern matching (minor issue)

- +90% of pattern matching is really just a more concise switch/case syntax

- the remaining -10% can be done by hand with mapping or just basic if statements

2. Immutable data-structures (minor issue)

- The `as const` suffix handles most of the use cases.

- There is a Records/Tuples proposal which would give some better syntactic sugar and some run-time performance improvements too.

3. Trait system (minor issue)

- Typescript compiles down to Javascript which at the lowest level is actually a prototype-based language. Traits can be approximated using run-time mixins which alter the prototypes to essentially perform the same functions as traits.

- But, it would be nice to have compile-time rather than run-time support for traits.

- I think most languages are still only coming to terms with the fact that traits are often better than "traditional OOP classes".

4. Effects system (investigate)

- It's too early to tell, but having an effects system (à la OCAML 5) will probably lead to entirely new programming paradigms. I'm not sure where it will lead, but having native algebraic effects to replace try/catch/throw would be very nice.

Edit: Formatting

> typescript's decorators

Typescript has decorators?!!

Damn, i wish I'd know about this 3 months ago.

Decorators in TypeScript is still an experimental feature which may change depending on if/how it's implemented in JavaScript.

> To enable experimental support for decorators, you must enable the experimentalDecorators compiler option either on the command line or in your tsconfig.json

https://www.typescriptlang.org/docs/handbook/decorators.html

> ..the current decorators proposal, which is a work in progress

https://github.com/tc39/proposal-decorators

Oh, but I see that the proposal is now at Stage 3, which means the specs and syntax are stable ("completely described") and ready for browsers to implement.

On further digging, it seems decorators will be a standard feature included in TypeScript 5.0 planned for release on March 14th.

TypeScript 5.0 Iteration Plan - https://github.com/microsoft/TypeScript/issues/51362