Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TypeScript Roadmap: January - June 2019 #29288

Open
DanielRosenwasser opened this issue Jan 7, 2019 · 102 comments
Open

TypeScript Roadmap: January - June 2019 #29288

DanielRosenwasser opened this issue Jan 7, 2019 · 102 comments
Labels

Comments

@DanielRosenwasser
Copy link
Member

@DanielRosenwasser DanielRosenwasser commented Jan 7, 2019

Roadmap Overview

This roadmap is meant to give our team and users clarity over our priorities over the next 6 months. It's meant more as a set of guidelines than as a strict set of tasks we are bound to finish. We may adjust over this period depending on changing needs and feedback from our users.

At a high-level, we're going to be focusing on the following 5 goals:

  • Types on every desk, in every home, for every JS developer
  • Productivity through strong tooling
  • Approachability and UX
  • Community engagement
  • Infrastructure and engineering systems

How do we plan to tackle this? While much of what we do ties into other domains, the how is broken down into the following sections which this roadmap will dive into:

Language design and innovation

TypeScript and the core type system

  • Enabling popular JS patterns in a type-safe way
  • Increasing expressivity
  • Proving relationships between types
  • Stricter settings
  • Implementing ECMAScript features

This is a continuous and iterative process. The goal of TypeScript's type system is to statically model patterns in JavaScript in a reasonable way while catching bugs and enforcing correctness. As more features are added to ECMAScript, and as we notice emerging patterns in the ecosystem, we have more work to do, and because the JavaScript world moves fast, so must we.

Something that may be surprising is "proving relationships between types". In a sense, this is our team generalizing patterns between type operators and encoding that in our type relationships. It's effectively having the compiler do algebra so that things "just work" when users use our type operators.

Back to top

JavaScript: TypeScript beyond TypeScript

  • Understanding more dynamic patterns
  • Making the JavaScript editing experience better
  • Automating the addition of JSDoc types
  • Smoothing the transition to TypeScript

TypeScript isn't just for TypeScript anymore. Our userbase now includes the JavaScript ecosystem as a whole, whether they are

  • using .js/.jsx files in editors powered by TypeScript,
  • compiling purely with allowJs.
  • type-checking with checkJs (also enabled by the // @ts-check comment), or
  • transitioning to TypeScript

Whoever these users are, we believe TypeScript can serve them in some way.

Back to top

Committee representation

  • Class fields (public and private)
  • Decorators
  • ES/CJS module interop
  • Null propagation/coalescing
  • Pipeline
  • Protocols
  • Class static blocks

We are involved in several different committees, including TC39 and the Node modules group. We try to provide representation as

  • implementers of TypeScript, the type-checker
  • implementers of JavaScript language services & tooling
  • a voice for the users of both of the above

Currently we're prioritizing forward compatibility with proposals/features that we've adopted early on, but we want to be involved in other above features both because we want to ensure that ECMAScript continues to grow in a way that makes developers' lives easier.

We have no plans to implement any proposals unless they hit stage 3 and we have high confidence in them.

Developer productivity tools and integration

Editor productivity

  • "Proactive" quick fixes (i.e. suggestions)
  • Declaration file fixes and refactorings
    • Generate missing .d.ts files
    • Locally fork @types package
  • "Bread and butter" fixes & refactorings
  • Migration tooling
More details here

These "bread and butter" quick fixes and refactorings refer to a class of code modifications and fixes that are applicable to most users, and generally improve everyone's quality of life. This functionality is also useful for teaching users about language features and patterns, and can make working with TypeScript/JavaScript more approachable.

Whereas many of our quick fixes are "reactive" (i.e. they are created and triggered after a user has seen a definite error), "proactive" fixes are a way of taking the experience a step further where TypeScript can analyze code and can surface suggestions and code changes for improvements rather than to fix an error. As an example, as of TypeScript 3.2, we can detect implicit `any` types even outside of `noImplicitAny` and offer up a fix to infer an appropriate type.

Beyond that, we have more targeted workflows in mind. A lot of our recent feedback around TypeScript has been that dealing with declaration files is still the most painful part of the workflow - specifically around adding declarations when they don't exist on DefinitelyTyped, and fixing erroneous declaration files. We want to investigate whether there's a good workflow we can provide here.

Another targeted workflow is migration. We'll be investing in ways to ease migration to TypeScript and typed JavaScript as we believe there is still work to be done here to smooth out the process of adding types.

Back to top

Linting

  • Semantic rules in ESLint
    • Parity with TSLint
    • Speed & scalability
  • Editor integration for ESLint

In a survey we ran in VS Code a few months back, the most frequent theme we heard from users was that the linting experience left much to be desired. Since part of our team is dedicated to editing experiences in JavaScript, our editor team set out to add support for both TSLint and ESLint. However, we noticed that there were a few architectural issues with the way TSLint rules operate that impacted performance. Fixing TSLint to operate more efficiently would require a different API which would break existing rules (unless an interop API was built like what wotan provides).

Meanwhile, ESLint already has the more-performant architecture we're looking for from a linter. Additionally, different communities of users often have lint rules (e.g. rules for React Hooks or Vue) that are built for ESLint, but not TSLint.

Given this, our editor team will be focusing on leveraging ESLint rather than duplicating work. For scenarios that ESLint currently doesn't cover (e.g. semantic linting or program-wide linting), we'll be working on sending contributions to bring ESLint's TypeScript support to parity with TSLint. As an initial testbed of how this works in practice, we'll be switching the TypeScript repository over to using ESLint, and sending any new rules upstream.

Back to top

Speed, scalability, and stability

  • Automatically unloading projects in TSServer
  • Composite project polish & fixes
  • Addressing performance issues
    • ETW support
    • Benchmarking infrastructure
    • Tracking down and fixing regressions
  • Automated testing infrastructure for TSServer
More details here

With composite projects, we introduced a "smarter" way to build co-located TypeScript projects for scenarios such as monorepos, "serverless" apps, etc. Part of the goal of composite projects was faster builds with seamless editor experience. We'll be continuing there, polishing the experience and making improvements like functionality for automatically swapping projects in and out to save memory.

In part because JavaScript users typically lack any sort of project configuration, we have seen some poor performance (especially for users in Visual Studio), and as such we'll be making this a near-term priority.

Over the last few versions of TypeScript, we've also seen some emit-time regressions. We're going to be investigating what happened to cause this, which includes setting up infrastructure to track the regression and hunting down the original problem.

Back to top

Command line experiences

We've consistently been asked for ways to automatically apply the sorts of code transformations that our quick fixes and refactorings use. Similarly, users have asked us for ways to trigger operations like "organize imports" or "format file" so that they can be used in pre-commit hooks. We want to investigate surfacing language service operations on the command line.

In the past, we've deferred to providing our users with APIs that they can consume. This has worked to some extent, encouraging users to create projects like tsfmt. In practice, we haven't seen that much of this.

In the meantime, we've seen projects like Prettier and jscodeshift sprout up, both with TypeScript support. These tools specialize specifically in their respective areas (formatting and code transformation), so we don't necessarily see ourselves as "competing" with these in any way; but if TypeScript drives the fundamental editing experience for TypeScript and JavaScript users, it feels like there's a gap to be filled between what happens in the editor and what happens during commits & CI, so we want to see what we can bring users here.

Education and UX

New handbook

  • Writing tailored intros for developers with different backgrounds
  • Writing new core handbook
  • Reference pages
  • Infrastructure to replace look & feel, and subsume current publishing process
  • Documentation around checkJs
More details here.

We've long had a comprehension and perception problem from our handbook. If you look at our documentation today, union types come way too late in handbook under a section called "advanced types". It also assumes too much about terminology. Additionally, TypeScript is often perceived as a language that pushes JavaScript developers to write object-oriented code, and we suspect this is because our documentation and examples focused on newer ECMAScript features like classes (partially to demonstrate down-leveling features, and partially because we lacked union types early on). We're overdue for some changes.

Over the next few months, we'll be working on a new version of handbook. Writing a general document for all users is difficult because the audience for TypeScript is broad, and one of the strengths (and weaknesses) of the current handbook is that it tries to serve everyone at once. We have several different groups of developers who have different expectations when learning TypeScript, and we need to adjust the level of exposure of different concepts. Given that, our goal is to organize the handbook into three different parts:

  1. Tailored introductions (setup for the core handbook)
  2. The core handbook (everyone reads this)
  3. Reference pages (kind of like deep-dives/appendices)

Our idea here is to segment developers and create a custom introduction to TypeScript for different groups. These buckets would include

  • Complete novices
  • Background mainly in JS (or another dynamically-typed language)
  • Background mainly in statically-typed OO languages
  • Background mainly in statically-typed FP languages
  • Background with many different languages (i.e. the "veteran" developers)

Once developers get past the intros, they are directed to the core handbook. The core handbook makes no assumptions about other languages, just a reasonably comfortable understanding of JavaScript. Users who read through the documentation of the handbook should never feel overwhelmed by details (the tone of the core handbook should be informal), and should be able to dive into most TypeScript codebases and feel comfortable contributing.

Users who are looking for precise behavior and descriptions of TypeScript, on the other hand, will have a new section called "reference pages". These reference pages should have precise language and clear examples without impacting readability.

Back to top

Error and type display UX

  • Interactive diagnostics and quick info
  • "Smarter" diagnostics
  • More related error spans
More details here

Error UX is a subtle but fundamental part of comprehending what the type system is doing. Over the past few years, TypeScript has accumulated what one could call "UX debt". As our type system has become more advanced, our UX hasn't kept up. To catch up, in the last 3 versions of TypeScript (3.0, 3.1, and 3.2) we worked on several different batches of error message improvements.

The community response has been overwhelmingly positive and has validated the original feedback we received from talking directly to users. As we try to serve more inexperienced users, we need to guide them to solutions quickly with precise but approachable error UX. This includes prioritizing misleading error messages that users file, and thinking deeply about what the heck is going wrong on the scarier messages. But it also opens up the opportunity for creative new ideas. For example, can we can have editors surface a more approachable experience, where users only see the full explanation of an error on demand.

Back to top

Playground and website

  • Update examples to less OO-heavy/ESNext style
  • Playground
    • Editable tsconfig.json
    • Serialized playground settings
    • Nightly playground releases via CDNs

In addition to the handbook, we need to make adjustments to the website. Our playground will need an update, and will need an update to the examples.

Community investment

DefinitelyTyped

More details here

DefinitelyTyped is now such a core part of the JavaScript and TypeScript ecosystem. First and foremost, it's what actually lets TypeScript users interoperate smoothly with JavaScript libraries. But beyond that, it now powers the JavaScript editing experience across several different editors.

Today, DefinitelyTyped is the 10th most popular open source project on GitHub. That means there's a lot of traffic. When it comes to our team, we see our primary role not in authoring declaration files, but as building out the tools for others to do so. That includes our weekly PR rotations (where members of our team review external PRs to DefinitelyTyped) and DefinitelyTyped's surrounding infrastructure such as the types publisher, dtslint, and dt-mergebot.

As described in the productivity section of this document, we also have some ideas to make the offhand authoring process easier.

Back to top

External contributors

  • Easier contributions to the docs
  • Open contributions to the playground and website
  • Automated PR process on TypeScript

Back to top

Partner teams

We continue to elicit feedback from various partner teams, including library authors and organizations/individuals using TypeScript in interesting or broadly applicable ways. This gives us insight on various things we could improve. If you or your organization have any interesting feedback, we'd probably love to hear from you!

Back to top

API Consumers

  • Rolling requests for API endpoints
  • Investigate improving rich editing experiences
    • in enhancing plugins like IntelliCode
    • in templates

Back to top

Outreach

  • Public talks
  • Meetup attendance
  • In-depth blog post content
  • Help with TSConf coordination

We want to encourage members of our team to be involved with the community, and write and talk about things that they find interesting. This keeps us close to our users and makes the project itself more approachable.

Internal engineering

Team infrastructure

  • Faster builds
    • Always use the LKG to build the compiler.
  • Better testing across external repositories

Everything that aids us in our day-to-day development and publishing processes around TypeScript is continuously valued. Making builds faster (e.g. converting our builds not to bootstrap themselves outside of CI), adding/migrating our lint rules, and adding new benchmarking infrastructure are things.

The idea here is really anything that improves

  • stability
  • productivity
  • ease of contribution

for development on the TypeScript project and any of our satellite projects.

Back to top

Organizational guidance

  • Internal guidance on TypeScript-first API designs
  • Providing internal partner teams with best practices for projects
  • Addressing major Microsoft-internal build regressions

Because we have the expertise, and because we are involved with the JavaScript community, we're able to provide a level of guidance across Microsoft to give users better experiences all around. Additionally, when we hear about major build regressions on large codebases, our internal teams can provide us with their source code, allowing us to create minimal repros (which is not always the case with external closed-source codebases). This work usually benefits external users in some way, whether it's because a bug fix generalizes, because we've produced better APIs, or because we've been able to extract new guidance.

Back to top

@j-oliveras

This comment has been minimized.

Copy link
Contributor

@j-oliveras j-oliveras commented Jan 7, 2019

Last time I checked, we live on 2019.

@DanielRosenwasser DanielRosenwasser changed the title TypeScript Roadmap: January - June 2018 TypeScript Roadmap: January - June 2019 Jan 7, 2019
@DanielRosenwasser

This comment has been minimized.

Copy link
Member Author

@DanielRosenwasser DanielRosenwasser commented Jan 7, 2019

@j-oliveras it's still January, give me a break. 😃

@AbraaoAlves

This comment has been minimized.

Copy link

@AbraaoAlves AbraaoAlves commented Jan 7, 2019

I have a dream:

"In a world where we finally can maintain/generate types in a project with just .js files. In a world where Salsa is for everyone and typescript power can live inside of any JS project!"

Just finish this issue #7546 and make this dream come true!

@ajafff

This comment has been minimized.

Copy link
Contributor

@ajafff ajafff commented Jan 7, 2019

Proving relationships between types

Developer productivity tools and integration

Does this mean you are finally exposing type relationship APIs so that tools can leverage the whole power of the type system?

@DanielRosenwasser

This comment has been minimized.

Copy link
Member Author

@DanielRosenwasser DanielRosenwasser commented Jan 7, 2019

@ajafff I don't think the first part was meant to suggest that, but I think that still falls under the rolling basis of requests from API consumers. Part of the concern there is the level of abstraction we can provide for consumers given the sorts of underlying optimizations we might use in the type system.

@Jessidhia

This comment has been minimized.

Copy link

@Jessidhia Jessidhia commented Jan 8, 2019

Wow, thanks for vindicating my migration to eslint + typescript-eslint-parser a few months ago 🎉

You probably don't have concrete plans to share yet, but I wonder whether you're planning on adopting typescript-estree + typescript-eslint-parser or if you're going to provide something else entirely.

Currently in my work projects I still have to run both linters; eslint + prettier for nearly everything, and tslint for semantic rules like no-floating-promises, no-unnecessary-type-assertion, strict-type-predicates and deprecation.


PS: I also use tslint's ordered-imports as eslint's similarly-named sort-imports and imports/sort do something else entirely, but that probably doesn't fall under the scope of your project

@ianschmitz

This comment has been minimized.

Copy link

@ianschmitz ianschmitz commented Jan 8, 2019

Thanks for the roadmap @DanielRosenwasser. Very informative.

We've been using @babel/preset-typescript to provide TypeScript support for our users of create-react-app and it has worked beautifully so far. Do you foresee any additional investment in the Babel ecosystem from your team with regards to this preset or otherwise?

@Jessidhia

This comment has been minimized.

Copy link

@Jessidhia Jessidhia commented Jan 8, 2019

Some more comments:

  • What is "ETW support"; event tracing for windows?
  • This is one thing that probably falls under personal preference, but it'd be greatly appreciated if the new docs wouldn't introduce as as an "alternate syntax" to <assert> and never mentioned again, but as as the only syntax and the <assert> as a kind of "annex b" legacy feature.
  • This probably falls under DT governance instead of the TypeScript project itself, but I really want to completely rewrite @types/react in a breaking way (years of accumulated misfeatures and legacy baggage) and I don't know how I could do it without creating a python3 problem. I probably need some help here.
  • Babel's typescript parser unfortunately hasn't kept up with new syntax features in tsc; it's still stuck in typescript 2.8 level support. I started a PR to add import() types support at least, but parsers are not my area of expertise...

Also, it could be a good idea to rename "typescript playground" to something else; "typescript demo"? "typescript repl"? "typescript sandbox"? A google search for "ts playground" doesn't return what you were looking for (twitter reacts), at least as it relates to this project.

@alecorsino

This comment has been minimized.

Copy link

@alecorsino alecorsino commented Jan 8, 2019

" Additionally, TypeScript is often perceived as a language that pushes JavaScript developers to write object-oriented code, and we suspect this is because our documentation and examples focused on newer ECMAScript features like classes "...
The above is partially true but IMO is that there are lots of people coming from OOP background and other languages that enforce OOP and a lack of understanding JavaScript language. I remember before JS "classes" I would find myself explaining to other devs why you don't need the C word in JS and they would call me heretic an curse the language :)
Another thing is I don't think that many people leverage the idea of Union types which is one of the most powerful thing that TS has but this idea is not well understood by OOP devs but by FPers mostly

@kungfooman

This comment has been minimized.

Copy link

@kungfooman kungfooman commented Jan 8, 2019

IMO the biggest drawback of TypeScript compared to Unity/C# is the lack of operator overloading, which is used like in every method, when you are dealing with vectors, matrices and quaternions. Could that be added to the list for the next 6 months? It would really give TypeScript an edge for all the game developers.

@Jessidhia

This comment has been minimized.

Copy link

@Jessidhia Jessidhia commented Jan 8, 2019

The above is partially true but IMO is that there are lots of people coming from OOP background and other languages that enforce OOP and a lack of understanding JavaScript language.

One problem I encountered a lot when I introduced modern JS in my codebase is people writing and exporting either singleton objects or classes that only have static members. This is due to people misunderstanding ES modules, and misunderstanding of ES modules is rampant in the JS/TS community.

I believe a contribution to it is how typescript implements star imports, and is self-perpetuating because of how many code samples and even @types packages (ab)use them for importing commonjs modules. Another unpopular "it's breaking but it's a good break" change I wish for, the --esModuleInterop behavior should be made true by default. Stop import { Component } from 'react'.

@Jessidhia

This comment has been minimized.

Copy link

@Jessidhia Jessidhia commented Jan 8, 2019

@kungfooman That's a TC39 / ECMAScript problem, not TypeScript, because it's a runtime feature. See Goals 3, 4, 6, 7 and 8 of https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals#goals

@uniqueiniquity

This comment has been minimized.

Copy link
Member

@uniqueiniquity uniqueiniquity commented Jan 8, 2019

@Kovensky I've been working to enable semantic rules for ESLint through typescript-estree and typescript-eslint-parser. Once eslint/typescript-eslint-parser#568 is in, we'll be able to merge the first few semantic rules to eslint-plugin-typescript and more in the future.

@kungfooman

This comment has been minimized.

Copy link

@kungfooman kungfooman commented Jan 8, 2019

@Kovensky It just needs a little bit of AST rewriting, like vector_a * vector_b would emit the JavaScript code vector_a.mul(vector_b).

If thats already too much "breakage", it could be a tsc compiler option.

Once JavaScript finally supports operator overloading, TypeScript would already be prepared to make use of it.

@Jessidhia

This comment has been minimized.

Copy link

@Jessidhia Jessidhia commented Jan 8, 2019

@uniqueiniquity hmm, you have to manually specify path to tsconfig.json in the eslint config 😢

Would be nice to be able to resolve it relative to the file being linted, or at least relative to the eslint config instead of relative to cwd.

@j-f1

This comment has been minimized.

Copy link

@j-f1 j-f1 commented Jan 8, 2019

hm interesting @kungfooman — with TS’s type system, you can know which variables have overloaded operators, although anys would wreak havoc.

@sompylasar

This comment has been minimized.

Copy link

@sompylasar sompylasar commented Jan 8, 2019

Please reconsider index (brackets []) operator type safety: #13778 (comment) — this operator is one of the core features of JavaScript and subsequently TypeScript but its usage is still not safe.

@milesj

This comment has been minimized.

Copy link

@milesj milesj commented Jan 8, 2019

Didn't see it mentioned in the list but a rewrite of the JSX/TSX layer and all it's edge cases would be great. Having everything typed as JSX.Element is also quite annoying, when the props shape should be inferred and used. I believe this PR covers a bit of it: #21699

@eamodio

This comment has been minimized.

Copy link
Member

@eamodio eamodio commented Jan 8, 2019

While probably largely outside the scope of TypeScript itself, I would love to see better webpack support (easy setup, fast recompiles, better sourcemap mapping, much better vscode problem matching support, etc)

@octref

This comment has been minimized.

Copy link
Member

@octref octref commented Jan 8, 2019

surfacing language service operations on the command line.

I feel surfacing the operations as API would be more worthwhile. For example, if I can get an easy-to-use API to get all unused variables in a codebase, get all usage of a specific library, etc, they would be immensely helpful for me to build other tools on top of it.

I doubt what people want is, say, running tsc --autofix-all-my-unused-variable-errors my-project on CLI / CI. An API that allows people to:

  • Get a list of diagnostic errors and autofixes
  • Plug in their own custom logics. For example, only fix this error in src/frontend but not src/backend, exclude any file that ends with test.ts, skip for variables of certain names.
  • Selectively run a part of the autofixes

would be really nice.

On the other hand, let's say TS offers an API for finding all usages of a specific library. Now I can generate dependency graphs or even automate code-splitting. I think making "CLI tool" the end goal would only capture very limited use cases.

In the past, we've deferred to providing our users with APIs that they can consume. This has worked to some extent, encouraging users to create projects like tsfmt. In practice, we haven't seen that much of this.

That's likely due to lack of documentation and working samples. I'd love more projects similar to https://github.com/dsherret/ts-simple-ast and https://github.com/dsherret/ts-ast-viewer from TS team.

@littlepoolshark

This comment has been minimized.

Copy link

@littlepoolshark littlepoolshark commented Jan 8, 2019

I am looking much forward to "Writing tailored intros for developers with different backgrounds"!

@donaldpipowitch

This comment has been minimized.

Copy link
Contributor

@donaldpipowitch donaldpipowitch commented Jan 8, 2019

  • Locally fork @types package

That sounds great. And it would be nice, if one could automatically create pull requests from those 😍

Similarly, users have asked us for ways to trigger operations like "organize imports" or "format file" so that they can be used in pre-commit hooks.

Oh, yes ❤️See you "remove unused vars"!

@johnnyreilly

This comment has been minimized.

Copy link

@johnnyreilly johnnyreilly commented Jan 8, 2019

While probably largely outside the scope of TypeScript itself, I would love to see better webpack support (easy setup, fast recompiles, better sourcemap mapping, much better vscode problem matching support, etc)

@eamodio - speaking on behalf of ts-loader and fork-ts-checker-webpack-plugin I second this 😉

And also: PRs are always welcome!

@remojansen

This comment has been minimized.

Copy link
Contributor

@remojansen remojansen commented Jan 8, 2019

@DanielRosenwasser happy new year 🎉 About the "New handbook" and "In-depth blog post content" I would be happy to try to contribute if you guys have a list of topics that you would like to cover.

Sridatta19 added a commit to Sridatta19/apollo-marvel that referenced this issue May 18, 2019
Why:
Palantir has deprecated tslint and typescript will be adopting eslint as well in future
microsoft/TypeScript#29288
https://medium.com/palantir/tslint-in-2019-1a144c2317a9
https://eslint.org/blog/2019/01/future-typescript-eslint

How:
Added typescript eslint parser and other relevant packages
@Voronar

This comment has been minimized.

Copy link

@Voronar Voronar commented Jun 2, 2019

Hi.
Is there some working repo with new handbook?
2 June today (last month of the roadmap), any news about new handbook?

@DanielRosenwasser

This comment has been minimized.

Copy link
Member Author

@DanielRosenwasser DanielRosenwasser commented Jun 2, 2019

@brainkim

This comment has been minimized.

Copy link

@brainkim brainkim commented Jul 8, 2019

However, we noticed that there were a few architectural issues with the way TSLint rules operate that impacted performance. Fixing TSLint to operate more efficiently would require a different API which would break existing rules (unless an interop API was built like what wotan provides).

Hello. Has anyone publicly written about why TSLint’s architecture made it less performant than ESLint’s? It seems that most of the discussion about this happened privately between teams at Microsoft and Palantir. There is this mention on Palantir’s blog

More performant analysis infrastructure: The ESLint API allows for more efficient implementations of certain classes of checks. Although it would be possible to refactor TSLint’s APIs, it seems prudent to leverage ESLint’s architecture and focus our development resources elsewhere.

but the subtext is that Palantir’s team disagrees with Microsoft’s assessment about the architecture and that the main reasons for choosing ESLint are 1. it makes typescript more accessible for current javascript developers and 2. it reduces fragmentation in the typescript ecosystem.

I’m interested in this because I’ve been dabbling with the typescript compiler/language service API and I think a post-mortem for why TSLint was deprecated would be very informative for people using these APIs going forward.

@RyanCavanaugh

This comment has been minimized.

Copy link
Member

@RyanCavanaugh RyanCavanaugh commented Jul 8, 2019

@brainkim the TL;DR is that (many) TSLint rules are written in a way that require one "walk" of the tree per rule, whereas ESLint's programming model has rules participate in a shared walk. This is important because for a large program, the walking of the syntax tree itself can be quite expensive; for example it's around 100ms for our own codebase. If you're running e.g. 60 rules, that implies a bare minimum cost of 6 seconds before any actual checking happens.

@DanielRosenwasser

This comment has been minimized.

Copy link
Member Author

@DanielRosenwasser DanielRosenwasser commented Jul 8, 2019

@johnnyreilly

This comment has been minimized.

Copy link

@johnnyreilly johnnyreilly commented Jul 8, 2019

Really nice explanation @DanielRosenwasser - thanks for sharing! ❤️

Sidebar: I'd lay good money that comment 👆 was a reply to an notification email from GitHub that you wrote on a phone 😉

@hamzahamidi

This comment has been minimized.

Copy link

@hamzahamidi hamzahamidi commented Jul 8, 2019

@Malek-Ben-Anes you may want to check this thread

@zbennett10

This comment has been minimized.

Copy link

@zbennett10 zbennett10 commented Jul 11, 2019

I realize it's July now and that I'm a tad late to the party but, I just want to throw in a +1 for HKT support!

@DanielRosenwasser DanielRosenwasser unpinned this issue Aug 28, 2019
@joepio joepio mentioned this issue Oct 2, 2019
3 of 3 tasks complete
colinthornton added a commit to colinthornton/react-typescript-starter that referenced this issue Nov 19, 2019
microsoft/TypeScript#29288 (comment)
According to the official TypeScript roadmap from Microsoft, the
team is focusing on ESLint over TSLint due to better performance.
I also added the `singleQuote` and `trailingComma` rules to the
Prettier configuration, mainly due to personal preference.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
You can’t perform that action at this time.