Rxjs运算符的Typescript import语句

时间:2017-06-14 10:40:12

标签: typescript import rxjs

我有一个Angular项目,像RxJs库操作符, map,do等不会导入。源中似乎没有通配符导入。

我的Ionic和Angular项目都有:

import 'rxjs/add/operator/map';
import 'rxjs/add/operator/do';

然后我有一个离子项目抱怨如果我没有明确说明进口。

"rxjs": "^5.1.0",

此外,在Ionic项目中,我似乎无法在node_modules文件夹中找到RxJS的link。虽然现在,我开始认为我需要一个像rx.lite.js这样的特定包...我不知道如何将rx.lite.js和rx.lite-aggregates.js添加到node_modules文件夹中的Angular项目。我不能在我的Ionic项目中得到它。对于Angular项目,在package.json中没有明确引用它们。某种传递依赖可能呢?

Angular项目是我从Git仓库获得的,所以我想知道是否有某种配置文件可以在项目的其他地方执行此操作。 我想知道是否有人可以帮助我解释这个谜团。

  • Angular项目package.json rxjs依赖

    {
      "compileOnSave": false,
      "compilerOptions": {
        "declaration": false,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "lib": [
          "es2016"
        ],
        "module": "commonjs",
        "moduleResolution": "node",
        "outDir": "../dist/out-tsc-e2e",
        "sourceMap": true,
        "target": "es6",
        "typeRoots": [
          "../node_modules/@types"
        ]
      }
    }
    
  • Angular项目tsconfig.json

    "rxjs": "5.1.1",
    
  • 离子项目package.json rxjs依赖

    {
       "compilerOptions": {
         "allowSyntheticDefaultImports": true,
         "declaration": false,
         "emitDecoratorMetadata": true,
         "experimentalDecorators": true,
         "lib": [
           "dom",
           "es2015"
         ],
         "module": "es2015",
         "moduleResolution": "node",
         "sourceMap": true,
         "target": "es5"
       },
       "include": [
         "src/**/*.ts"
       ],
      "exclude": [
        "node_modules"
       ],
     "compileOnSave": false,
     "atom": {
       "rewriteTsconfig": false
     }
    
  • 离子项目tsconfig.json

    SQL SERVER

    }

我一直试图理解tsconfig.json。见{{3}}

2 个答案:

答案 0 :(得分:4)

这很可能取决于源代码的结构。

通常,您永远不应从'rxjs'导入并始终导入特定模块。例如:

import { Observable } from 'rxjs/Observable';

执行import { Observable } from 'rxjs'时,您导入Rx.ts文件,该文件已添加所有运算符,这意味着您无需调用任何import 'rxjs/add/operator/...';,因为运算符已经导入。< / p>

例如,如果您有一个Angular项目,并且在根模块中添加了import { Observable } from 'rxjs',即使您没有在根模块中使用任何Observable,也不需要单独导入任何运算符一点都不。

我认为你的情况完全一样。它取决于您从'rxjs'导入的位置以及是否在您尝试使用任何运算符之前发生。

因此,angular-cli默认情况下会从'rxjs'导入黑名单。

答案 1 :(得分:1)

rxJs有许多不同的导入技术。在我读到这篇文章之前我很困惑: 的 Understanding Operator Imports

请注意,如果您使用此导入技术(您可能应该):

import {myOperator} from 'rxjs/operators/myOperator';

...要实际使用 myOperator,您需要调用它的call方法,或将其传递给pipe运算符:

myOperator.call(parameters);

pipe运算符似乎超出了本主题的范围。只要知道它提供了一种绕过这种.call语法的方法,重要的是,它允许您有效地链接以这种方式导入的多个运算符。请参阅链接了解更多详情(实际上,它非常有用)。

最后,Ionic中的rxjs运算符会出现类型错误,特别是如果您使用的是angularfire2(版本5)。有时您可以通过将Angularfire提供的对象强制转换为Observable&lt; ..某种类型来解决这些错误。&gt;