Angular 2 beta.17: 'bản đồ' thuộc tính không tồn tại trên loại 'Có thể quan sát <Phản hồi>'


195

Tôi vừa nâng cấp từ Angular 2 beta16 lên beta17 , do đó yêu cầu rxjs 5.0.0-beta.6. (Changelog tại đây: https://github.com/angular/angular/blob/master/CHANGELOG.md#200-beta17-2016-04-28 ) Trong phiên bản beta16, tất cả đều hoạt động tốt về chức năng Quan sát / bản đồ. Các lỗi sau xuất hiện sau khi tôi nâng cấp và xảy ra khi bản in cố gắng dịch mã:

  1. Thuộc tính 'bản đồ' không tồn tại trên loại 'Có thể quan sát' (bất cứ nơi nào tôi đã sử dụng bản đồ có thể quan sát được)
  2. c: /path/node_modules/rxjs/add/operator/map.d.ts (2.16): lỗi TS2435: Các mô-đun xung quanh không thể được lồng trong các mô-đun hoặc không gian tên khác.
  3. c: /path/node_modules/rxjs/add/operator/map.d.ts (2.16): lỗi TS2436: Khai báo mô-đun xung quanh không thể chỉ định tên mô-đun tương đối.

Tôi đã thấy câu hỏi / câu trả lời này nhưng nó không giải quyết được vấn đề: Lỗi có thể quan sát được với Angular2 beta.12 và RxJs 5 beta.3

AppBoot.ts của tôi trông như thế này (đã tham khảo rxjs / map):

///<reference path="./../node_modules/angular2/typings/browser.d.ts"/>
import {bootstrap} from "angular2/platform/browser";
import {ROUTER_PROVIDERS} from 'angular2/router';
import {HTTP_PROVIDERS} from 'angular2/http';
[stuff]
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
import {enableProdMode} from 'angular2/core';
import { Title } from 'angular2/platform/browser';


//enableProdMode();
bootstrap(AppDesktopComponent, [
    ROUTER_PROVIDERS,
    HTTP_PROVIDERS,
    Title
]);

Có ai có ý tưởng gì đang xảy ra haywire không?


Câu trả lời:


284

Bạn cần nhập maptoán tử:

import 'rxjs/add/operator/map'

3
Cả nhóm Angular và nhóm RxJS đều KHÔNG khuyến nghị phương pháp nhập toàn bộ RX như thế này. Bạn không nên làm điều đó. Nó quá lớn Câu trả lời đầu tiên ở trên là tốt, nhưng câu thứ hai, không quá nhiều. @ 0x1ad2 bạn có thể cập nhật câu trả lời của mình để không bao gồm việc nhập lớn đó làm tùy chọn thứ hai không?
băng giá

2
Điều này là không trực quan. Trường hợp này được ghi nhận là một sự phụ thuộc để thực hiện Observable trong phát triển Angular 2+?
Joe

Điều này có áp dụng cho ion 3.20.0 không? Tôi gặp vấn đề tương tự vì ionic không tự động nhập bản đồ. Nhập rõ ràng hoạt động nhưng tôi không chắc nó là chính xác.
LordDraagon

1
điều này không khắc phục được vấn đề với nhiều người. Tôi đã phải sử dụng ống thay vì rxjs / add / toán tử / bản đồ Tôi đã sử dụng rxjs / toán tử nhập với pipe và .pipe (map (res => res.json ()));
tiền mã hóa

Tôi đã đến đây sau một số tìm kiếm của Google trong thời gian chúng tôi hiện đang sử dụng Angular 7 và RXJS đã trải qua một số thay đổi. Phương pháp mới là import { map } from 'rxjs/operators', nhưng một câu trả lời khác có nhiều chi tiết hơn.
Colby Hunter

78

Tôi đã nâng cấp plugin gulp-typecript của mình lên phiên bản mới nhất (2.13.0) và bây giờ nó sẽ biên dịch mà không gặp trở ngại nào.

CẬP NHẬT 1: Trước đây tôi đã sử dụng gulp-typecript phiên bản 2.12.0

CẬP NHẬT 2: Nếu bạn đang nâng cấp lên Angular 2.0.0-rc.1, bạn cần thực hiện các thao tác sau trong tệp appBoot.ts của mình:

///<reference path="./../typings/browser/ambient/es6-shim/index.d.ts"/>
import { bootstrap } from "@angular/platform-browser-dynamic";
import { ROUTER_PROVIDERS } from '@angular/router-deprecated';
import { HTTP_PROVIDERS } from '@angular/http';
import { AppComponent } from "./path/AppComponent";
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
// import 'rxjs/Rx'; this will load all features
import { enableProdMode } from '@angular/core';
import { Title } from '@angular/platform-browser';



//enableProdMode();
bootstrap(AppComponent, [
    ROUTER_PROVIDERS,
    HTTP_PROVIDERS,
    Title
]);

Điều quan trọng là tham chiếu đến es6-shim / index.d.ts

Điều này giả định rằng bạn đã cài đặt các kiểu chữ es6-shim như hiển thị ở đây: nhập mô tả hình ảnh ở đây

Thêm thông tin về các kiểu chữ cài đặt từ Angular tại đây: https://angular.io/docs/ts/latest/guide/typescript-configuration.html#!#typings


Bạn có thể vui lòng đề cập đến số phiên bản cũ có vấn đề? Cảm ơn.
Meligy

1
@Meligy Trước đây tôi đã sử dụng gulp-typecript phiên bản 2.12.0
brando

1
Tuyệt vời. Tôi đã cập nhật bài viết của mình về thông mapbáo lỗi để bao gồm một ghi chú cho người dùng có vấn đề tương tự. Cảm ơn rất nhiều :)
Meligy

1
@Meligy Tôi gặp vấn đề tương tự một lần nữa khi tôi nâng cấp lên Angular2 RC. Tôi đã cập nhật câu trả lời của tôi ở trên để cho thấy cách tôi giải quyết nó.
brando

6
import 'rxjs/Rx'; // Tải tất cả các tính năng
VahidN

67

Bản đồ 'Bản đồ' của Rxjs 5.5 không tồn tại trên loại Có thể quan sát được.

Vấn đề liên quan đến thực tế là bạn cần thêm đường ống xung quanh tất cả các nhà khai thác.

Thay đổi điều này,

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

đến đây

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

Nhập bản đồ như thế này,

import { map } from 'rxjs/operators';

Nó sẽ giải quyết vấn đề của bạn.


3
Điều này cũng áp dụng cho Rxjs 6. Mỗi hướng dẫn mà tôi nhìn vào, chúng có chức năng bản đồ không có đường ống. Điều này không hiệu quả với tôi cho đến khi tôi thêm đường ống và nhập bản đồ từ 'rxjs / toán tử' chính xác như câu trả lời.
Keyvan Sadralodabai

Vâng, nó cũng áp dụng cho Rxjs 6 là tốt.
Hiran DA Walawage 30/07/18

41

Trong trường hợp của tôi, nó chỉ đủ để bao gồm bản đồ và lời hứa:

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

Tôi đã giải quyết vấn đề này bằng cách nhập một số thành phần rxjs như tài liệu chính thức khuyến nghị:

1) Nhập câu lệnh trong một tệp ứng dụng / rxjs-oper.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) Nhập chính toán tử rxjs trong dịch vụ của bạn:

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

Một lần nữa, câu trả lời hay nhất cho câu hỏi không có nhiều phiếu nhất. Đây là câu trả lời tốt nhất cho câu hỏi này. Cảm ơn bạn đã chia sẻ. Tôi ước rằng những người khác sẽ bỏ phiếu này.
băng giá

26

Nếu bạn tình cờ thấy lỗi này trong VS2015, có một vấn đề về github & cách giải quyết được đề cập ở đây:

https://github.com/Microsoft/TypeScript/issues/8518#issuecomment-229506506

Điều này đã giúp tôi giải quyết property map does not exist on observablevấn đề. Bên cạnh đó, hãy đảm bảo bạn có phiên bản bản thảo trên 1.8.2


8
Thay thế C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TypeScript\typescriptServices.js bằng typecriptService hoạt động cho VS 15. ( khởi động lại so với sau khi thay thế tệp )
tchelidze

thay thế các tập tin được đề cập ở trên cũng làm việc cho tôi
Krishnan

Vẫn không có bản cập nhật từ microsoft ... Tại sao họ không sửa nó?
Piotrek

26

CÂU TRẢ LỜI CUỐI CÙNG CHO NHỮNG NGƯỜI SỬ DỤNG NÀY 6:

Thêm lệnh dưới đây vào tệp * .service.ts của bạn "

import { map } from "rxjs/operators";

**********************************************Example**Below**************************************
getPosts(){
this.http.get('http://jsonplaceholder.typicode.com/posts')
.pipe(map(res => res.json()));
}
}

Tôi đang sử dụng windows 10;

angular6 với bản thảo V 2.3.4.0


Có vẻ như chúng ta không còn có thể nhập nó trong app.module.ts. Bây giờ chúng tôi cần nhập nó trong từng dịch vụ và thành phần
Adam Mendoza

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

&

npm install rxjs@6 rxjs-compat@6 --save

đã làm cho tôi


13

Trong góc 2x

Trong ví dụ.component.ts

import { Observable } from 'rxjs';

Trong ví dụ.component.html

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

Trong Angular 5x hoặc Angular 6x:

Trong ví dụ.component.ts

import { Observable, interval, pipe } from 'rxjs';
import {switchMap, map} from 'rxjs/operators';

Trong ví dụ.component.html

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

1
Tại sao chúng ta cần sử dụng đường ống thay vì bản đồ trực tiếp?
KR

10

CẬP NHẬT ngày 29 tháng 9 năm 2016 cho Chung kết Angular 2.0 & VS 2015

Cách giải quyết không còn cần thiết nữa, để khắc phục bạn chỉ cần cài đặt TypeScript phiên bản 2.0.3 .

Sửa lỗi lấy từ chỉnh sửa trên bình luận vấn đề github này .


3
Tôi có vấn đề này, tôi cũng đã cài đặt 2.0.3: /
Mild Fuzz

1
Tôi có TS 2.1.6 nhưng vẫn thấy vấn đề
alltej

Tại thời điểm nhận xét này, TS mới nhất là 2.5.2. Phiên bản này là phá vỡ cho tôi. Sử dụng 2.3.x hoạt động.
PigBoT

10

Theo tôi hiểu đó là vì rxjsbản cập nhật cuối cùng. Họ đã thay đổi một số toán tử và cú pháp. Sau đó chúng ta nên nhập các rxtoán tử như thế này

import { map } from "rxjs/operators";

thay vì điều này

import 'rxjs/add/operator/map';

Và chúng ta cần thêm đường ống xung quanh tất cả các nhà khai thác như thế này

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

Nguồn ở đây


9

Như Justin Scofield đã đề xuất trong câu trả lời của mình, cho phiên bản mới nhất của Angular 5 và cho Angular 6, vào ngày 1 tháng 6 năm 2018, chỉ import 'rxjs/add/operator/map';là không đủ để loại bỏ lỗi TS: [ts] Property 'map' does not exist on type 'Observable<Object>'.

Cần phải chạy lệnh dưới đây để cài đặt các phụ thuộc cần thiết: npm install rxjs@6 rxjs-compat@6 --savesau đó maplỗi phụ thuộc nhập được giải quyết!


1
Có vẻ như nhiều thay đổi đột phá hơn là điều đáng lo ngại
Noobie3001

8

Tôi đã phải đối mặt với lỗi tương tự. Nó đã được giải quyết khi tôi làm ba điều sau:

  1. Cập nhật lên rxjs mới nhất:

    npm install rxjs@6 rxjs-compat@6 --save
  2. Nhập bản đồ và lời hứa:

    import 'rxjs/add/operator/map';
    import 'rxjs/add/operator/toPromise';
  3. Đã thêm một báo cáo nhập khẩu mới:

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

7

Có vẻ như RxJS mới nhất yêu cầu bản in 1.8 nên bản bản 1.7 báo lỗi trên.

Tôi đã giải quyết vấn đề này bằng cách nâng cấp lên phiên bản bản thảo mới nhất.


Nếu bạn đang sử dụng tsctừ lệnh, vui lòng kiểm tra tsc -v;-) Sử dụng "script" thậm chí còn tốt hơn, hãy xem stackoverflow.com/a/37034227/478584
tomaszbak

6

Thông báo lỗi tương tự sẽ bật lên khi chuyển từ phiên bản 5 sang 6. Đây là câu trả lời cho sự thay đổi thành rxjs-6.

Nhập các toán tử riêng lẻ, sau đó sử dụng pipethay vì xích.

import { map, delay, catchError } from 'rxjs/operators'; 

source.pipe(
  map(x => x + x),
  delay(4000),
  catchError(err => of('error found')),
).subscribe(printResult);

6

Nếu bạn đang sử dụng angular4, sử dụng dưới đây nhập. nó nên hoạt động

nhập 'rxjs / add / toán tử / bản đồ';

Nếu bạn đang sử dụng angular5 / 6 thì hãy sử dụng bản đồ với đường ống và nhập dưới đây

nhập {map} từ "rxjs / toán tử";


1

thuộc tính 'bản đồ' không tồn tại trên loại 'phản ứng có thể quan sát' góc 6

Giải pháp: Cập nhật phiên bản CLI góc và lõi

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 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.