4 ms·
But it is its own thing that compiles down to javascript, and is otherwise syntactically and semantically "very very similar" to javascript. It IS always static
by bruce343434 3y ago
But it is its own thing that compiles down to javascript, and is otherwise syntactically and semantically "very very similar" to javascript. It IS always statically typechecked and has good, or at least well defined, semantics for typing. Typescript does not change base javascript. It really is a well separated layer on top of javascript.
The way python does it is different. There's no "typethon". The python grammar was simply extended to allow any random expression as a "type".
In fact:
x: print("hi") = 4
is valid python, and it does print "hi" without even so much as a warning. Personally, I don't think "print(hi)" should be a valid type.
- tomn 3y agoThis feels like splitting hairs -- python and typescript are equivalent, as they are both dynamically typed languages with type annotations. The fact that the typescript implementation does not run typescript directly, and cPython does not type check before running the code, are both implementation details. Typescript is just a better type system on top of javascript than python's type system is on top of untyped python, because typescript is a cohesive design rather than a collection or random stuff accumulated over time. There's no reason that couldn't have happened for python, it just didn't.
- lijok 3y ago> Personally, I don't think "print(hi)" should be a valid type. And it isn't: a.py:1: error: Invalid type comment or annotation [valid-type] a.py:1: note: Suggestion: use print[...] instead of print(...) Found 1 error in 1 file (checked 1 source file)
- n3150n 3y agoIt is not. As the function `print("hi")` is executed, the argument type in this case becomes `Any`, as it would be for any other executed function. As stated in the typing documentation [0]: "the only legal parameters for type are classes, Any, type variables, and unions of any of these types". [0] https://docs.python.org/3/library/typing.html https://docs.python.org/3/library/typing.html
- bruce343434 3y agoThat's fine and all. But it runs without errors or warnings. I can put that in main.py and do `python3 main.py` and it will simply run fine. What is the point of this whole system if it's not enforced?
- mgkimsal 3y agoAmen.
- tomn 3y agoIf you want type checking, run mypy. If you don't want type checking, don't run mypy. I don't see what's so difficult. If it was technically possible to run programs that have type errors in other languages, they would have the option to ignore type errors too, because it's convenient. Typescript also ignores errors (generating js output for you to run) by default, so what's the point if it's not enforced?
- bruce343434 3y agoTypescript does not ignore type errors by default. Type error = fail to compile
- tomn 3y agoTry it, it produces output by default. You have to add a flag/option to change this https://www.typescriptlang.org/tsconfig/#noEmitOnError https://www.typescriptlang.org/tsconfig/#noEmitOnError
- vbezhenar 3y agoTypescript "compilation" is just stripping out types, mostly. JavaScript is a subset of TypeScript (mostly). There was even a proposal to extend JavaScript comments syntax, so all typescript types would become comments (so you could just run typescript code with JS interpreter).