Угловые бета 2.17: свойство ' map 'не существует для типа' Observable '



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





  1. свойство ' map ' не существует по типу 'Observable '(везде, где я использовал карту с 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 бета.12 и RxJs бета 5.3



мой идентифицируется как вредные троянского коня.ts выглядит так (я уже ссылаюсь на 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
]);


кто-нибудь имеет представление, что происходит с ума?

725   15  

15 ответов:

вам нужно импортировать map оператор:

import 'rxjs/add/operator/map'

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

обновление 1: я ранее использовал gulp-typescript версии 2.12.0

обновление 2: при обновлении до углового 2.0.0-rc.1, вам нужно сделать следующее в ваш идентифицируется как вредные троянского коня.файл ТС:

///<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
]);

важным моментом является ссылка на es6-shim / index.д.ТС

предполагается, что вы установили типы es6-shim, как показано на рисунке здесь: enter image description here

подробнее о наборах установить из углового здесь: https://angular.io/docs/ts/latest/guide/typescript-configuration.html#!#typings

RxJS 5.5 "свойство' map ' не существует на типе Observable.

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

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

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

этой

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

и

импорт карты, как это,

import { map } from 'rxjs/operators';

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

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

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

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

1) операторы импорта в одном приложении/rxjs-операторов.файл ТС:

// 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';

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

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

это помогло мне решить property map does not exist on observable вопрос. Кроме того, убедитесь, что у вас есть версия typescript выше 1.8.2

import 'rxjs/add/operator/map';

&

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

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

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

добавьте следующую команду в свой *.услуга.ТС файл"

import { map } from "rxjs/operators";

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

Я использую windows 10;

angular6 с typescript V 2.3.4.0

обновление 29 сентября 2016 для Angular 2.0 Final & VS 2015

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

исправление взято из редактирования на этот вопрос на GitHub комментарий.

в угловой 2x

в Примере.деталь.ТС

import { Observable } from 'rxjs';

в Примере.деталь.HTML-код

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

в угловом 5x или угловом 6x:

в Примере.деталь.ТС

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

в Примере.деталь.HTML-код

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

как Джастин Скофилд предложил в своем ответе, для последнего выпуска Angular 5 и для Angular 6, как на 1 июня 2018 года, просто import 'rxjs/add/operator/map'; недостаточно для удаления ошибки TS: [ts] Property 'map' does not exist on type 'Observable<Object>'.

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

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

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

подобные сообщения об ошибках будут появляться при переходе с версии 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);

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

import { map } from "rxjs/operators";

вместо

import 'rxjs/add/operator/map';

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

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

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

я столкнулся с подобной ошибкой. Это было решено, когда я сделал эти три вещи:

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

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

  1. импорт карты и обещание:

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

  2. добавлена новая инструкция импорта:

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

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

импорт 'rxjs / add / operator / map';

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

импорт { map } из "rxjs / operators";

Comments

    Ничего не найдено.