在WebStorm中修复RxJS操作符的TypeScript自动完成

时间:2016-06-15 08:38:11

标签: typescript angular webstorm rxjs

我正在使用WebStorm进行Angular 2项目。

我在TypeScript和我的一个组件中编码,我使用Observable

import { Observable } from "rxjs/Rx";
import 'rxjs/Rx';

@Component({...})
export class SearchComponent {

  @ViewChild('input') input: ElementRef;

  ngAfterViewInit() {
    let inputElement = this.input.nativeElement;
    let keyups = Observable.fromEvent(inputElement, 'keyup');  // <-- WebStorm error
    keyups.subscribe(data => console.log(data));
  }
}

此代码确实有效(每次在输入字段中输入内容时都会记录到控制台),但WebStorm会抱怨fromEvent方法(“未解析的函数或方法”)。

此外,如果我在Observable类上触发自动完成,则缺少RxJS文档中列出的大多数运算符。例如,输入Observable.fr应生成fromfromCallbackfromEventfromPromise的列表...但WebStorm仅建议一种方法({{1 }})。

如何在WebStorm中为可观察对象获得正确的自动完成/ TypeScript支持?

我尝试了不同的方式导入withLatestFrom,我已尝试this article中的建议(即将Observable添加到"files": ["node_modules/rxjs/Rx.KitchenSink.d.ts"]),但没有任何效果。

5 个答案:

答案 0 :(得分:6)

即使使用WebStorm 2016.2(最终版),我也遇到了同样的问题。对我有用的解决方案是对另一个答案的评论,所以为了使其更加明显,这里作为一个正确的答案:

删除.idea文件夹。

我做了这个,然后重新启动了WebStorm。然后所有的rxjs定义都有效。

答案 1 :(得分:4)

我正在使用WebStorm 2016,这对我的角度2 +离子2项目有所帮助:

WebStorm -> Preferences -> Languages & Frameworks -> JavaScript -> Libraries 
-> [Ensure 'ECMAScript 6' and 'your-progect/node_modules' are checked]
.then Apply -> Save -> Restart WebStorm

答案 2 :(得分:2)

原来这是PhpStorm的一个问题。

我联系了Jetbrains支持,他们建议升级到版本2016.2 EAP(早期访问计划),这确实解决了这个问题。

答案 3 :(得分:1)

尝试使用这些设置来查看webstorm是否可以选择

tsconfig.json(在angular2项目的根目录中)

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  }
}

在你的package.json中(如果你还没有安装打字)

"devDependencies": {
    "typings":"^1.0.4"
  }

在项目的根目录中创建文件typings.json和/或确保在文件中添加的文字中添加了这些文件

typings.json

{
  "globalDependencies": {
    "core-js": "registry:dt/core-js#0.0.0+20160317120654",
    "jasmine": "registry:dt/jasmine#2.2.0+20160505161446",
    "node": "registry:dt/node#4.0.0+20160509154515"
  }
}

完成所有这些运行后(安装新的dev模块

  

npm install

然后运行此命令

安装打字机
  

打包安装

切换到Webstorm / Phpstorm并允许IDE完成索引。然后检查Webstorms自动完成是否有多个与Observables相关的方法。

尝试在项目文件中导入Observable,如

import { Observable } from 'rxjs';

可能不是你想要的答案,但值得尝试,因为人们的想法已经不多了。

编辑:固定文件名不是 typing.json 应为 typings.json

答案 4 :(得分:0)

我在WebStorm 2016.3上遇到过类似的问题,很幸运通过将IDE配置为使用rxjs作为javascript库来解决它:

  1. 转到&#34;首选项&#34;并打开&#34;语言&amp;框架&gt; JavaScript&gt;库&#34;
  2. 点击&#34;添加...&#34;并设置以下字段:

    • 姓名:rxjs
    • 框架类型:node_modules
    • 可见性:项目
    • 点击&#34; +&#34;按钮并附加项目rxjs目录下的node_modules目录。
  3. 点击&#34;确定&#34;并确保该库已应用于项目级别。