• thedeadwalking4242@lemmy.world
    link
    fedilink
    arrow-up
    6
    ·
    7 days ago

    Recently I encountered an issue with “casting”. I had a class “foo” and a class “bar” that extended class foo. I made a list of class “foo” and added “bar” objects to the list. But when I tried use objects from “foo” list and cast them to bar and attempted to use a “bar” member function I got a runtime error saying it didn’t exists maybe this was user error but it doesn’t align with what I come to expect from languages.

    I just feel like instead of slapping some silly abstraction on a language we should actually work on integrating a proper type safe language in its stead.

        • masterspace@lemmy.ca
          link
          fedilink
          English
          arrow-up
          1
          ·
          edit-2
          3 days ago

          Because that object is of a type where that member may or may not exist. That is literally the exact same behaviour as Java or C#.

          If I cast or type check it to make sure it’s of type Bar rather than checking for the member explicitly it still works:

          And when I cast it to Foo it throws a compile time error, not a runtime error:

          I think your issues may just like in the semantics of how Type checking works in JavaScript / Typescript.