Typescript 角度2 beta.17:属性';地图';不存在于类型';可观察<;回应>';

Typescript 角度2 beta.17:属性';地图';不存在于类型';可观察<;回应>';,typescript,angular,rxjs,Typescript,Angular,Rxjs,我刚刚从Angular 2beta16升级到beta17,这反过来需要rxjs 5.0.0-beta.6。(此处为Changelog:)在beta16中,关于可观察/映射功能,所有功能都运行良好。以下错误在我升级后出现,并在typescript尝试传输时发生: 类型“Observable”上不存在属性“map”(我将map与Observable一起使用的任何位置) c:/path/node_modules/rxjs/add/operator/map.d.ts(2,16):错误TS2435:环境模

我刚刚从Angular 2beta16升级到beta17,这反过来需要rxjs 5.0.0-beta.6。(此处为Changelog:)在beta16中,关于可观察/映射功能,所有功能都运行良好。以下错误在我升级后出现,并在typescript尝试传输时发生:

  • 类型“Observable”上不存在属性“map”(我将map与Observable一起使用的任何位置)
  • c:/path/node_modules/rxjs/add/operator/map.d.ts(2,16):错误TS2435:环境模块不能嵌套在其他模块或名称空间中
  • c:/path/node_modules/rxjs/add/operator/map.d.ts(2,16):错误TS2436:环境模块声明无法指定相对模块名称
  • 我看到了这个问题/答案,但它不能解决问题:

    我的appBoot.ts看起来像这样(我已经在引用rxjs/map):

    ///
    从“angular2/platform/browser”导入{bootstrap};
    从“angular2/ROUTER”导入{ROUTER_PROVIDERS};
    从'angular2/HTTP'导入{HTTP_提供者};
    [材料]
    导入'rxjs/add/operator/map';
    导入“rxjs/add/operator/toPromise”;
    从'angular2/core'导入{enableProdMode};
    从“angular2/platform/browser”导入{Title};
    //enableProdMode();
    引导(AppDesktopComponent[
    路由器供应商,
    HTTP_提供商,
    标题
    ]);
    

    有人知道怎么回事吗?

    我将gulp typescript插件升级到最新版本(2.13.0),现在它可以顺利编译

    更新1:我以前使用的是GulpTypeScript版本2.12.0

    更新2:如果要升级到Angular 2.0.0-rc.1,则需要在appBoot.ts文件中执行以下操作:

    ///
    从“@angular/platform browser dynamic”导入{bootstrap}”;
    从“@angular/ROUTER deprecated”导入{ROUTER_PROVIDERS}”;
    从'@angular/HTTP'导入{HTTP_PROVIDERS};
    从“/path/AppComponent”导入{AppComponent};
    导入'rxjs/add/operator/map';
    导入“rxjs/add/operator/toPromise”;
    //进口“rxjs/Rx”;这将加载所有功能
    从“@angular/core”导入{enableProdMode};
    从“@angular/platform browser”导入{Title};
    //enableProdMode();
    引导程序(AppComponent[
    路由器供应商,
    HTTP_提供商,
    标题
    ]);
    
    重要的是参考es6垫片/索引d.ts

    这假设您已安装es6垫片类型,如下所示:


    更多关于从Angular安装打字的信息:

    看起来最新的RxJS需要typescript 1.8,因此typescript 1.7报告了上述错误


    我通过升级到最新的typescript版本解决了此问题。

    如果您碰巧在VS2015中看到此错误,这里会提到github问题和解决方法:

    这确实帮助我解决了可观察的属性映射不存在的问题。
    此外,请确保您的typescript版本高于1.8.2。在我的情况下,仅包含map和promise是不够的:

    import 'rxjs/add/operator/map';
    import 'rxjs/add/operator/toPromise';
    
    import 'rxjs/add/operator/map';
    import 'rxjs/add/operator/toPromise';
    
    我通过按照建议导入几个rxjs组件解决了这个问题:

    1) 在一个app/rxjs-operators.ts文件中导入语句:

    // import 'rxjs/Rx'; // adds ALL RxJS statics & operators to Observable
    
    // See node_module/rxjs/Rxjs.js
    // Import just the rxjs statics and operators we need for THIS app.
    
    // Statics
    import 'rxjs/add/observable/throw';
    
    // Operators
    import 'rxjs/add/operator/catch';
    import 'rxjs/add/operator/debounceTime';
    import 'rxjs/add/operator/distinctUntilChanged';
    import 'rxjs/add/operator/map';
    import 'rxjs/add/operator/switchMap';
    import 'rxjs/add/operator/toPromise';
    
    2) 在您的服务中导入rxjs运算符本身:

    // Add the RxJS Observable operators we need in this app.
    import './rxjs-operators';
    

    于2016年9月29日更新Angular 2.0最终版和2015年版

    不再需要解决方法,只需修复即可


    从上的编辑中获取的修复。

    您需要导入
    映射
    操作符:

    import 'rxjs/add/operator/map'
    

    从版本5转换到版本6时,将弹出类似的错误消息。以下是对rxjs-6的更改的答案

    导入各个操作符,然后使用
    管道
    而不是链接

    import { map, delay, catchError } from 'rxjs/operators'; 
    
    source.pipe(
      map(x => x + x),
      delay(4000),
      catchError(err => of('error found')),
    ).subscribe(printResult);
    

    Rxjs 5.5“Observable类型上不存在属性“map”

    问题与需要在所有操作符周围添加管道有关

    改变这个,

    this.myObservable().map(data => {})
    
    对此

    this.myObservable().pipe(map(data => {}))
    

    像这样导入地图

    import { map } from 'rxjs/operators';
    
    它会解决你的问题

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

    npm安装rxjs@6rxjs-compat@6--保存


    为我工作

    正如Justin Scofield在回答中所建议的那样,对于Angular 5的最新版本和Angular 6,截至2018年6月1日,仅导入“rxjs/add/operator/map”;不足以删除TS错误:
    [ts]属性“map”在类型“Observable”上不存在。

    必须运行以下命令才能安装所需的依赖项:
    npm安装rxjs@6rxjs-compat@6--保存
    ,然后解决
    映射
    导入依赖项错误!

    角度2x 在example.component.ts中

    import { Observable } from 'rxjs';
    
    import { Observable, interval, pipe } from 'rxjs';
    import {switchMap, map} from 'rxjs/operators';
    
    在example.component.html中

      Observable.interval(2000).map(valor => 'Async value');
    
    valorAsync = interval(2500).pipe(map(valor => 'Async value'));
    
    角5x或角6x: 在example.component.ts中

    import { Observable } from 'rxjs';
    
    import { Observable, interval, pipe } from 'rxjs';
    import {switchMap, map} from 'rxjs/operators';
    
    在example.component.html中

      Observable.interval(2000).map(valor => 'Async value');
    
    valorAsync = interval(2500).pipe(map(valor => 'Async value'));
    

    据我所知,这是因为上次更新了
    rxjs
    。他们更改了一些运算符和语法。此后,我们应该像这样导入
    rx
    运算符

    从“rxjs/operators”导入{map};

    而不是这个

    import 'rxjs/add/operator/map';
    
    我们需要像这样在所有操作符周围添加管道

    this.myObservable().pipe(映射(数据=>{}))


    如果您使用的是angular4,则源代码为

    ,使用下面的导入。它应该可以工作

    导入'rxjs/add/operator/map';

    如果您使用的是angular5/6,则使用带有管道的贴图,并在1下方导入

    从“rxjs/operators”导入{map};

    使用ANGULAR 6的用户的最终答案: 在*.service.ts文件中添加以下命令”

    我正在使用 视窗10


    angular6使用typescript V 2.3.4.0时,我遇到了类似的错误。当我做以下三件事时,问题得到了解决:

  • 更新至最新的rxjs:

    npm install rxjs@6 rxjs-compat@6 --save
    
  • 导入地图和承诺:

    import 'rxjs/add/operator/map';
    import 'rxjs/add/operator/toPromise';
    
    import 'rxjs/add/operator/map';
    import 'rxjs/add/operator/toPromise';
    
  • 添加了新的导入语句:

    import { Observable, Subject, asapScheduler, pipe, of, from, interval, merge, fromEvent } from 'rxjs';
    

  • 类型“可观测响应”6上不存在属性“映射”

    解决方案: 更新Angular CLI和核心版本

    ng update @angular/cli           //Update Angular CLi 
    ng update @angular/core          //Update Angular Core 
    npm install --save rxjs-compat   //For Map Call For Post Method 
    
    可以