7 ms·
>> What took took me so long? It took a while for all of Microsoft's marketing to kick in and for the mindless hypewagon to reach full speed. I have decades o
by jondubois 8y ago
>> What took took me so long?
It took a while for all of Microsoft's marketing to kick in and for the mindless hypewagon to reach full speed.
I have decades of experience with Typed ECMAScript (first with ActionScript 3 from 2006 and then TypeScript). It's not worth it. Productivity will drop enormously and bug density will not change at all.
- matthoiland 8y agoPart of me feels the same way. I've been through AS3, Coffeescript, Dart, and now the Typescript hypewagons. I'm willing to give it a deep dive, but I'd rather see an optional flag in an upcoming ES version for types and other TS superset features.
- simplify 8y agoAside from type annotations, TS only has one superset feature (decorators). It's already behind a flag.
- sverrejoh 8y agoand namespaces and enums at least.
- simplify 8y agoThanks, I had forgotten about those.
- WorldMaker 8y agoNamespaces are considered a deprecated artifact from TS < 1 and most projects suggest turning on lint errors for using them. Even if you do them, they are simple syntax sugar for an IIFE pattern that has been common in JS since forever. Enums are simple syntax sugar for constants patterns you could write by hand easily. Other than decorators and JSX-related stuff (also behind compiler flags), TS has been pretty strict about keeping only to Stage 3+ ES proposals since 1.x. Decorators got a strong push from Angular-based teams and JSX gets a lot of attention from React-based teams, so its also not like TS is adding stuff "just because", they are doing it for real world project engineering needs.
- simion314 8y agoMy personal experience is that AS3 was a better experience over JS and Flex4 was a pleasure to work over the JS frameworks and CSS mess.
- jondubois 8y agoAS3 was better than TypeScript in several ways; - It was interpreted natively (no build step). It was fast. AS3 was much faster than AS2. - It was heavily targeted at games. Games have a lot of objects and those objects tend to have complex relationships with each other (I.e. more inheritance and more polymorphic compositions; where different objects can be passed to the same method to produce different effects).
- 52-6F-62 8y agoIf I have to continue doing any kind of front end work, I would be very okay with a native TypeScript runtime in the browser with support for modules. Add in the option for a flag to skip type-checking and we might have a win-win for fans of pure ES6/7/8.
- Matthias247 8y agoOverall AS3 with Flex felt great, and I used it for one of the funnest projects I've ever worked on (prototyping for a new GUI system). The inbuilt widgets functionalities were great, with things like skinning functionality and the ability to place shaders on widgets right on your fingertip. States were easy to model. I think it took Javascript years to catch up, and while now some of the modern frameworks (React, Angular, Vue) might be ahead in lots of regards, they might still be behind in others. Actionscript itself had a pretty weak type system compared to what Typescript can do now (or could do years ago). E.g. there were no generics, apart from the some kind of semimagical vector. So this one is the smaller loss.
- simion314 8y agoI agree, my point was not that AS3 > TS , my point was that AS3 > JS still and AS3 is old and it had no improvements in years. The GUI part is still behind though, you still can't CSS the scrollbars and you need a JS library, you can't CSS the select options and you need a library to create a better dropdown, you have no built-in or a standard set of Widgets simlar to the DataGrid or AdvancedDataGrid, working on some old projects CSS drives me crazy
- naiyt 8y ago> It's not worth it. Productivity will drop enormously How does TypeScript make your "productivity drop enormously"? It has type inference, union types, looks just like ES6, and the typing is fully optional. The learning curve is quick if you've ever done static typing before (and not that hard even if you haven't). And you get the productivity boost of not dealing with a lot of the regular JavaScript BS (no more "spooky undefined at a distance" because somebody forgot a 3rd parameter 4 methods down the callstack), as well as the ability to safely and automatically refactor, and the ability to immediately understand the API of other people's code or libraries (as long as it's typed, and most popular libraries have type definitions now). In my experience the productivity benefits more than make up for the time you spend managing your types.
- jondubois 8y ago>> How does TypeScript make your "productivity drop enormously - Slow debug cycle due to increased compile time. If using TDD, it takes longer to run tests. The delays adds up - Especially on large projects and especially if you're not used to having a build step during development. - Sporadic source mapping issues/bugs which makes it hard to fix things (I had an issue with Mocha tests last week where it was always telling me that the issue was on line 1). I've worked with TypeScript on multiple projects across different companies but every single time, there has been source mapping or configuration issues of some kind. - Type definitions from DefinitelyTyped are often out of date or have missing properties/methods. It means that I can't use the latest version of a library. - Third party libraries are difficult to integrate into my project's code due to conflicts in type names or structural philosophy (e.g. they leverage types to impose constraints which are inconsistent with my project requirements). - Doesn't guarantee type safety at runtime; e.g. If parsing an object from JSON at runtime; you still need to do type validation explicitly. The 'unknown' type helps but it's not clear that this whole flow of validating unknown data and then casting to a known type adds any value over regular schema validation done in plain JavaScript. - Whenever I write any class/method, I have to spend a considerable amount of time and energy thinking about how to impose constraints on the user of the library/module instead of assuming that the user is an intelligent person who knows what they're doing. - Compiler warnings make it hard to test code quickly using console.log(...); I'm more reliant on clunky debuggers which slows me down a lot and breaks my train of thought. - The 'rename symbol' feature supported by some IDEs is nice, but if a class or property is mentioned inside a string (e.g. in a test case definition) then it will not rename that; so I still have to do text search after doing a symbol rename and manually clean up. - It takes a lot of time think of good names for interfaces and they are renamed often as project requirements evolve. It's not always clear whether similar concepts should be different types or merged into one. It often comes down to what constraints you want to impose on users; This adds a whole layer of unnecessary mental work which could have been better spent on thinking about logic and coming up with meaningful abstractions which don't require arbitrary constraints to be imposed. - Setting up TypeScript is a pain. - Adds a lot of dependencies and complexity. It's a miracle that TypeScript works at all given how much complexity it sweeps under the carpet. Have you looked at the output JavaScript? Try to compile something that uses async generators and see what the output looks like.
- deleted 8y ago[deleted]
- tracker1 8y agoI'm not sure that I agree... AS3 had typing that was very similar (originally part of ES4 spec). I often feel that it can make some code that should be simple more complicated and sometimes reduces some flexibility in practice, or is harder to define. What research I can find indicates it's mostly a wash on time. You prevent a certain class of bugs, but at the same time you have the time to add typing. In the end, I think it depends. If you're working on a large project with a lot of developers in differing areas, the appeal is growing on me. In the end, when working on code you don't trust with behaviors that are loosely defined, you get at least a little more confidence in refactoring things out. I've worked with and without. I prefer without, but now am working on a project I wish I'd started with it. I still want to use it with babel as there are a few features I want to use that are not yet in the browser.