this post was submitted on 16 Jul 2025
77 points (93.3% liked)

Programming

21691 readers
116 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



founded 2 years ago
MODERATORS
 

Hi! I've created this page to showcase the features of Mint (since there are so many) and their corresponding versions in other similar languages.

you are viewing a single comment's thread
view the rest of the comments
[–] olafurp@lemmy.world 15 points 5 days ago* (last edited 5 days ago) (1 children)

TS as a statically typed language is not what I would call it. It's a language with enforced type annotations but can be circumvented pretty easily. For example when receiving a JSON from an http request a string field can be just whatever.

[–] FizzyOrange@programming.dev 6 points 5 days ago (1 children)

That's nitpicking. It is statically typed. Is Dart not statically typed because it has dynamic.

You could call it "gradually typed" if you want to be pedantic.

can be circumvented pretty easily

That means it isn't sound.

[–] olafurp@lemmy.world 5 points 5 days ago (1 children)

Gradually typed is a great description because it's neither fully static or dynamic. TS does allow you to circumvent the types too easily to be called statically typed.

const strings: string[] = ([1] as any[])

Is ok in TS land so the type of strings is not really static so to speak because you can assign whatever to it. Writing this in Dart would give

error - The argument type 'List<dynamic>' can't be assigned to the parameter type 'List<string>'. - argument_type_not_assignable

if I'm not mistaken.

[–] hikaru755@lemmy.world 3 points 4 days ago (1 children)

I get your point, but that's not a great example. Kotlin is a statically typed language, and this compiles (and runs!) just fine:

val test: List<String> = listOf(1) as List<String>
println(test) // prints "[1]"

Even val test: String = 1 as String will compile, but at least gives you an exception at runtime, which the equivalent typescript wouldn't.

[–] olafurp@lemmy.world 2 points 4 days ago (1 children)

That's crazy, I thought that would be an invalid cast or something.

[–] hikaru755@lemmy.world 2 points 4 days ago

Unfortunately not. You do get a warning that it's an unchecked cast at least.

Granted, the issue here is generic type erasure, which was a tradeoff that was decided on for backwards compatibility when generics were first introduced to Java, so it's not like an actually desirable feature of the language. But the point is that this wouldn't be reason for anyone to not call Java and Kotlin not statically typed, their type system is just a bit weaker than others in certain aspects