Я только что обновился с Angular 2 beta16 до beta17, что, в свою очередь, требует rxjs 5.0.0-beta.6. (Список изменений здесь: https://github.com/angular/angular/blob/master/CHANGELOG.md#200-beta17-2016-04-28) В бета-версии 16 все работало хорошо в отношении функциональности Observable / map. Следующие ошибки возникли после обновления и возникают при попытке перенастройки машинописного текста:

  1. Свойство 'map' не существует для типа 'Observable' (везде, где я использовал карту с наблюдаемым)
  2. c: /path/node_modules/rxjs/add/operator/map.d.ts (2,16): ошибка TS2435: внешние модули не могут быть вложены в другие модули или пространства имен.
  3. c: /path/node_modules/rxjs/add/operator/map.d.ts (2,16): ошибка TS2436: объявление внешнего модуля не может указывать относительное имя модуля.

Я видел этот вопрос / ответ, но это не решает проблему: Наблюдаемые ошибки с Angular2 beta.12 и RxJs 5 beta.3

Мой appBoot.ts выглядит так (я уже ссылаюсь на rxjs / map):

/// 
импортировать {bootstrap} из "angular2 / platform / browser";
импортировать {ROUTER_PROVIDERS} из 'angular2 / router';
импортировать {HTTP_PROVIDERS} из angular2 / http;
[вещи]
import 'rxjs / add / operator / map';
import 'rxjs / add / operator / toPromise';
импортировать {enableProdMode} из angular2 / core;
импортировать {Заголовок} из 'angular2 / platform / browser';


// enableProdMode ();
бутстрап (AppDesktopComponent, [
    ROUTER_PROVIDERS,
    HTTP_PROVIDERS,
    Заголовок
]);

Кто-нибудь знает, что происходит?

brando

Ответов: 16

Ответы (16)

Я обновил свой плагин gulp-typescript до последней версии (2.13.0), и теперь он компилируется без сбоев.

ОБНОВЛЕНИЕ 1: раньше я использовал gulp-typescript версии 2.12.0

ОБНОВЛЕНИЕ 2: Если вы обновляетесь до Angular 2.0.0-rc.1, вам необходимо сделать следующее в файле appBoot.ts:

/// 
импортировать {bootstrap} из "@ angular / platform-browser-dynamic";
импортировать {ROUTER_PROVIDERS} из '@ angular / router-deprecated';
импортировать {HTTP_PROVIDERS} из '@ angular / http';
импортировать {AppComponent} из "./path/AppComponent";
import 'rxjs / add / operator / map';
import 'rxjs / add / operator / toPromise';
// импортировать 'rxjs / Rx'; это загрузит все функции
импортировать {enableProdMode} из '@ angular / core';
импортировать {Заголовок} из '@ angular / platform-browser';



// enableProdMode ();
бутстрап (AppComponent, [
    ROUTER_PROVIDERS,
    HTTP_PROVIDERS,
    Заголовок
]);

Важна ссылка на es6-shim / index.d.ts

This assumes you have installed the es6-shim typings as shown here: enter image description here

Подробнее о типах, устанавливаемых из Angular, можно здесь: https://angular.io/docs/ts/latest/guide/typescript-configuration.html#! # Typings

Как предложил в своем ответе Джастин Скофилд, для последней версии Angular 5 и для Angular 6, по состоянию на 1 июня 2018 г., просто import 'rxjs / add / operator / map'; не Достаточно для устранения ошибки TS: [ts] Свойство 'map' не существует для типа 'Observable '.

Для установки необходимых зависимостей необходимо выполнить следующую команду: npm install rxjs@6 rxjs-compat@6 --save, после чего устраняется ошибка зависимости map import dependency!

ОБНОВЛЕНИЕ 29 сентября 2016 г. для Angular 2.0 Final и VS 2015

Обходной путь больше не нужен, для исправления вам просто нужно установить TypeScript версии 2.0.3.

Исправление, взятое из редактирования этого комментария к проблеме на github.

в угловом 2x

В example.component.ts

import { Observable } from 'rxjs';

В example.component.html

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

В Angular 5x или Angular 6x:

В example.component.ts

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

В example.component.html

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

Если вы используете angular4, используйте ниже импорт. должно работать.

import 'rxjs / add / operator / map';

Если вы используете angular5 / 6, используйте карту с трубкой и импортируйте ниже единицы

импорт {карта} из "rxjs / operator";

Как я понял из-за последнего обновления rxjs. Они изменили некоторые операторы и синтаксис. После этого мы должны импортировать rx такие операторы, как этот

импорт {карта} из "rxjs / operator";

вместо этого

import 'rxjs/add/operator/map';

И нам нужно добавить конвейер вокруг всех таких операторов, как этот

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

Источник здесь

В моем случае было бы недостаточно включить только карту и обещание:

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

Я решил эту проблему, импортировав несколько компонентов rxjs как официальную документацию рекомендует:

1) Импорт операторов в одном файле app / rxjs-operator.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';

Похоже, что последняя версия RxJS требует машинописного текста 1.8, поэтому машинописный текст 1.7 сообщает об указанной выше ошибке.

Я решил эту проблему, обновившись до последней версии машинописного текста.

Вам необходимо импортировать карту оператор:

import 'rxjs/add/operator/map'

Подобные сообщения об ошибках будут появляться при переходе с версии 5 на 6. Вот ответ на переход на rxjs-6.

Импортируйте отдельные операторы, затем используйте pipe вместо связывания.

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

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

У меня была аналогичная ошибка. Это было решено, когда я сделал эти три вещи:

  1. Обновление до последней версии rxjs:

    npm install rxjs@6 rxjs-compat@6 --save
    
  2. Импортировать карту и обещание:

    import 'rxjs / add / operator / map';
    import 'rxjs / add / operator / toPromise';
    
  3. Добавлен новый оператор импорта:

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

Если вы видите эту ошибку в VS2015, здесь упоминается проблема с github и обходной путь:

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

Это помогло мне решить, что карта свойств не существует в наблюдаемой проблеме. Кроме того, убедитесь, что у вас установлена ​​версия машинописного текста выше 1.8.2

.

ИТОГОВЫЙ ОТВЕТ ДЛЯ ТЕХ, КТО ИСПОЛЬЗУЕТ ANGULAR 6:

Добавьте приведенную ниже команду в свой *. Service.ts файл "

import { map } from "rxjs/operators";

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

Я использую окна 10;

angular6 с машинописным текстом V 2.3.4.0

свойство 'map' не существует для типа 'наблюдаемый ответ' angular 6

Solution: Update Angular CLI And Core Version

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 
import 'rxjs/add/operator/map';

и

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

у меня работало

Rxjs 5.5 «Свойство« map »не существует для типа Observable.

Проблема была связана с тем, что нужно добавить pipe вокруг всех операторов.

Измените это,

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

на это

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

И

Импортировать карту вот так,

import { map } from 'rxjs/operators';

Решит ваши проблемы.

2022 WebDevInsider