Hacker News new | ask | show | jobs
by brianleroux 1558 days ago
FINALLY, both Ruby and Python have had optional types for a while; glad JS is catching up.
2 comments

Except that's not what this is. These are just "type comments" that are not enforced at runtime.
Are python type annotations enforced at runtime ? I'm pretty sure they're not
I thought Python type comments weren't enforced at runtime either.. are they?
No, they are not.
PHP has optional types as well, although types are enforced when present
That's a major limitation of JavaScript. For example:

    // TypeScript
    function add(a: number, b: number): number { return a + b; }

    // tsc output (JavaScript)
    function add(a, b) { return a + b; }

    // (ab)use by someone using my lib without TypeScript
    add("abc", "def");
Now, addition is a contrived example because it'll still work with strings, but the point is that such usage violates my code contract because the contract was deleted during compilation. It's possible to do this:

    function add(a: number, b: number): number {
        if (typeof a !== 'number' || typeof b !== 'number')
            throw 'no';
        return a + b;
    }
But that's needlessly verbose, and eslint will complain about useless code. If enforceable type annotations could be added to JavaScript, that'd be a huge plus.
As I understand this proposal, it would not add what you're talking about. Just for clarity.