WebStorm 2016.2 released: TypeScript 2.0, improved support for React, Angular CLI, and more

Please welcome the official release of WebStorm 2016.2, the second update for our JavaScript IDE this year. This update brings even better experience while editing and refactoring JavaScript and TypeScript code and steps up the IDE’s debugging capabilities.

Download WebStorm 2016.2 for your OS on the What’s new page on our website.

Here are the highlights of this update:

  • Support for the upcoming TypeScript 2.0 features.
  • Improvements in React support: coding assistance for component properties defined using PropTypes, support for non-DOM attributes and lifecycle methods.
  • Integration with Angular CLI for creating new projects and the collection of Angular 2 code snippets.
  • New intentions for upgrading to ECMAScript 6: Convert to arrow function and Convert to const or let.

In other updates, you can now take advantage of support for jspm imports, support for fonts with ligatures in the editor, improvements in working with VCS patches, and more.

For a more detailed overview please visit What’s new in WebStorm 2016.2.

Your WebStorm Team

About Ekaterina Prigara

Ekaterina Prigara is WebStorm product marketing manager at JetBrains. She's passionate about new technologies, UX and coffee.
This entry was posted in Release Announcements and tagged , , , , . Bookmark the permalink.

22 Responses to WebStorm 2016.2 released: TypeScript 2.0, improved support for React, Angular CLI, and more

  1. Ivan says:

    Hello
    Do you have any plans to fix following major issues in 2016.2 release?
    https://youtrack.jetbrains.com/issue/WEB-18894

  2. Michael Hodgins says:

    Just updated, and I get this lovely error. Back to 2016.1.

    Internal error. Please report to http://jb.gg/ide/critical-startup-errors

    com.intellij.ide.plugins.PluginManager$StartupAbortedException: Fatal error initializing ‘com.intellij.openapi.actionSystem.ActionManager’
    at com.intellij.ide.plugins.PluginManager.handleComponentError(PluginManager.java:246)
    at com.intellij.openapi.components.impl.PlatformComponentManagerImpl.handleInitComponentError(PlatformComponentManagerImpl.java:43)
    at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter.getComponentInstance(ComponentManagerImpl.java:536)
    at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:246)
    at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:212)
    at org.picocontainer.defaults.BasicComponentParameter.resolveInstance(BasicComponentParameter.java:77)
    at org.picocontainer.defaults.ComponentParameter.resolveInstance(ComponentParameter.java:114)
    at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getConstructorArguments(ConstructorInjectionComponentAdapter.java:257)
    at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:217)
    at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
    at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
    at com.intellij.util.pico.CachingConstructorInjectionComponentAdapter.getComponentInstance(CachingConstructorInjectionComponentAdapter.java:58)
    at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter.getComponentInstance(ComponentManagerImpl.java:495)
    at com.intellij.openapi.components.impl.ComponentManagerImpl.getComponent(ComponentManagerImpl.java:179)
    at com.intellij.openapi.wm.WindowManager.getInstance(WindowManager.java:61)
    at com.intellij.openapi.vfs.newvfs.RefreshProgress.a(RefreshProgress.java:66)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:358)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
    at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:184)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:229)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:227)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:227)
    at java.awt.Dialog.show(Dialog.java:1084)
    at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:869)
    at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:666)
    at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:637)
    at com.intellij.idea.Main.showMessage(Main.java:352)
    at com.intellij.idea.Main.showMessage(Main.java:311)
    at com.intellij.ide.plugins.PluginManager.processException(PluginManager.java:136)
    at com.intellij.ide.IdeEventQueue.a(IdeEventQueue.java:423)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:361)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
    at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:184)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:229)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:227)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:227)
    at java.awt.Dialog.show(Dialog.java:1084)
    at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:869)
    at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:666)
    at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:637)
    at com.intellij.idea.Main.showMessage(Main.java:352)
    at com.intellij.idea.Main.showMessage(Main.java:311)
    at com.intellij.ide.plugins.PluginManager.processException(PluginManager.java:136)
    at com.intellij.ide.IdeEventQueue.a(IdeEventQueue.java:423)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:361)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
    at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:184)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:229)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:227)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:227)
    at java.awt.Dialog.show(Dialog.java:1084)
    at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:869)
    at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:666)
    at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:637)
    at com.intellij.idea.Main.showMessage(Main.java:352)
    at com.intellij.idea.Main.showMessage(Main.java:311)
    at com.intellij.ide.plugins.PluginManager.processException(PluginManager.java:136)
    at com.intellij.ide.IdeEventQueue.a(IdeEventQueue.java:423)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:361)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
    at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:184)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:229)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:227)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:227)
    at java.awt.Dialog.show(Dialog.java:1084)
    at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:869)
    at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:666)
    at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:637)
    at com.intellij.idea.Main.showMessage(Main.java:352)
    at com.intellij.idea.Main.showMessage(Main.java:311)
    at com.intellij.ide.plugins.PluginManager.processException(PluginManager.java:136)
    at com.intellij.ide.IdeEventQueue.a(IdeEventQueue.java:423)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:361)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
    Caused by: java.util.MissingResourceException: Can’t find bundle for base name messages.JadeBundle, locale en_US
    at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:1082)
    at com.intellij.AbstractBundle.getResourceBundle(AbstractBundle.java:91)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:208)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.b(ActionManagerImpl.java:557)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:957)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.a(ActionManagerImpl.java:473)
    at com.intellij.openapi.actionSystem.impl.ActionManagerImpl.(ActionManagerImpl.java:143)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.picocontainer.defaults.InstantiatingComponentAdapter.newInstance(InstantiatingComponentAdapter.java:193)
    at org.picocontainer.defaults.ConstructorInjectionComponentAdapter$1.run(ConstructorInjectionComponentAdapter.java:220)
    at org.picocontainer.defaults.ThreadLocalCyclicDependencyGuard.observe(ThreadLocalCyclicDependencyGuard.java:53)
    at org.picocontainer.defaults.ConstructorInjectionComponentAdapter.getComponentInstance(ConstructorInjectionComponentAdapter.java:248)
    at com.intellij.util.pico.CachingConstructorInjectionComponentAdapter.getComponentInstance(CachingConstructorInjectionComponentAdapter.java:58)
    at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter.getComponentInstance(ComponentManagerImpl.java:495)
    … 96 more

  3. Unfortunately the comment I just added a few days before this release to the previous blog post (with links to issues I had filed) has been overlooked now. It was based on experiences with the RC for this release though, my question remains. I get so many unnecessary and obviously wrong autocomplete suggestions, it’s really annoying. Just excluding objects that clearly only exist in some far away local scope and test files would solve about 80% of those issues immediately. I guess looking at the objects defined in some deep-down local scope is an attempt to find out what gets passed out of the function in the end, but it doesn’t seem to work very well. I’m trying hard not to use TypeScript and instead try to use WebStorm and JSDoc/Closure compiler type annotations to get some of the compile-time type system benefits, but right now this isn’t working out too well.

    • Konstantin Ulitin says:

      Problems you described in your previous comment require different fixes. Though, I understand your pain about irrelevant suggestions from local variables. I’ll look into this in the nearest time.

      • I’m not mad if it doesn’t happen right away, I have to prioritize what I work on myself after all. Just trying to find the right balance between trying to get the topic some attention and being completely quiet. I think doing this right is a pretty big project, and on the other side of the cost/benefit analysis is how many people are actually using WS like I do. Those who want good compile-time type checks probably go to TypeScript right anyway.

  4. Wojciech Jankowski says:

    I suppose TypeScript support has became buggy in the 2016.2 release, at least for Typescript 1.8. I’ve noticed this when Webstorm stopped resolving some interfaces for “sequelize” and “express” npm modules properly (I use corresponding typings libraries). After downgrading to 2016.1 all works fine again.

    • Andrey Starovoyt says:

      Hi. Could you please provide a code sample?

      • Wojciech Jankowski says:

        Hey,

        I’m sorry for confusion. Now that I’ve checked it second time, my “sequelize” code works. Previously WebStorm couldn’t recognize properties of ‘SequelizeStatic’ interface that were inherited from ‘DataTypes’ interface.Sample:

        import * as Sequelize from “sequelize”;
        Sequelize.INTEGER <- INTEGER not recognized

        Now it works so maybe I was so much in hurry, the WebStorm hadn't indexed all libs.

        As of "express" problem: the problem still remains, however also in 2016.1, so maybe the needed functionality is not supported yet. I'm using router instance created with express.Router() method and defined in "express-serve-static-core" declaration library. Sample:

        import * as Express from "express";
        import * as Core from "express-serve-static-core";
        let router: Core.Router = Express.Router();
        let subRouter: Core.Router = Express.Router();

        router.use("/subPath", subRouter); <- Argument types do not match parameters

        In declaration library:
        export interface Router extends IRouter {}
        interface IRouter extends RequestHandler {

        use: IRouterHandler & IRouterMatcher
        }
        interface IRouterMatcher {
        (path: PathParams, …handlers: RequestHandler[]): T;

        }
        type PathParams = string | RegExp | (string | RegExp)[];

        Since PathParams may be string and IRouter implements RequestHandler, the above call of the “use” method matches IRouterMatcher and should work. TypeScript compiles it, code works, only WebStorm complains. However, I guess, this issue should not be associated with the WebStorm 2016.2 release alone.

        • Wojciech Jankowski says:

          EDIT:
          I’ve tried another thing. I installed WebStorm 2016.2 one more time (as I mentioned, I had downgraded it to 2016.1) and then buggy “sequelize” came back. So this issue still occurs. Sample:

          import * as Sequelize from “sequelize”;
          let defineAttributes: Sequelize.DefineAttributes = {
          id: {type: Sequelize.INTEGER(5)}
          }
          Error: ‘unresolved function or method INTEGER()’ (not shown in 2016.1 version)

          declaration library:
          interface SequelizeStatic extends SequelizeStaticAndInstance, DataTypes {…}
          interface DataTypes {
          INTEGER : DataTypeInteger;
          }

          • Franz Zemen says:

            I’m seeing similar issues with Express. For example, the .use function parameters now provide the error “Argument types do not match parameters”….annoying since the typescript compiler provides no such problems.

  5. Umur Gedik says:

    Why private constructor marked as error? Typescript 2.0 supports it.

    • Ekaterina Prigara says:

      Do you have a built-in TypeScript compiler enabled in Preferences | Languages and Frameworks | TypeScript? What version is used?

      • Przemyslaw Koziel says:

        Hi,

        I also have problem with private constructor.

        Error:(9, 7) TS1089: ‘private’ modifier cannot appear on a constructor declaration.

        plus strictNullChecks is not recognized

        Error:Error: Parse tsconfig error [{“messageText”:”Unknown compiler option ‘strictNullChecks’.”,”category”:1,”code”:5023}]

        I have those problems for bundled(1.8.10) and custom version(from node_modules 2.0.0). In Atom it works correctly.

        BR

        • Ekaterina Prigara says:

          Hi,

          the errors you get are from the compiler, not from WebStorm. Can you please double-check that you have selected the 2.0 version in Preferences | Languages & Frameworks | TypeScript – TypeScript version? Thanks!

          • Michael says:

            Hi,

            I am running Webstorm 2016.2.2 and cannot see a 2.0 version under Settings | Languages & Frameworks | TypeScript – TypeScript version. The only options are ‘Bundled (1.8.10) or a Custom directory.

          • Ekaterina Prigara says:

            TypeScript 2.0 is not released yet, therefor it’s not bundled with WebStorm. To use it, please select Custom directory and specify the path to TypeScript 2.0.

  6. Josh says:

    Can we use these in IntelliJ Idea?

Leave a Reply

Your email address will not be published. Required fields are marked *