class Lol {
    get length() {
        console.log('Lol. LMAO even.');
        return 5;
    }
}

const noLolsAllowed = (notALol: string) => {
    for (let i = 0; i < notALol.length; ++i) {
        console.log('No lols here');
    }
}

noLolsAllowed(new Lol() as unknown as string);
  • CannotSleep420@lemmygrad.mlOP
    link
    fedilink
    arrow-up
    5
    ·
    2 years ago

    I guess what I’m trying to say is that while Typescript is great, the types just make the development experience much nicer but don’t actually prevent any of the fuckery of Javascript. As for whether it’s strongly typed or not, I don’t find the term helpful. People call Typescript strongly typed, but is a language really strongly typed if you can tell it to ignore types? Strong is a relative term that doesn’t tell you much about the type system.

    • Ephera
      link
      fedilink
      English
      arrow-up
      2
      ·
      2 years ago

      Yeah, at this point, I’m basically using “strongly typed” as “How expressive/useful is the type system?”.

      Haskell, Rust, Scala, OCaml → Strongly typed.
      Python, JavaScript, C, Go → Worse than that.

      Personally, I would still put TypeScript in the strong category, because unless you are using as, it does have a helpful type system. A language preventing shitfuckery during runtime is kind of too late anyways.

      But yeah, sometimes even the best type system cannot express everything you know to be true as a human. Then you need to start casting. But casting can break during refactoring, so a language at least telling you during runtime that the cast is broken, is more helpful than a language just accepting shitfuckery. So, this does make TypeScript somewhat less strongly typed, even with my definition.