2017-01-24 3 views
1

Я новичок в угловом и npm, но, узнав, у меня есть ошибка, с кодом, который, похоже, работает на источнике, который я пытаюсь воспроизводить (here).ts Property 'map' не существует по типу 'Observable <Response>'

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

Это мой код:

return this.http.get('api/cards.json') 
.map((response:Response) => <Card[]>response.json().data) 
.do(data=>console.log(data)) 
.catch(this.handleError); 

На .map, Visual Studio код дает мне эту ошибку:

ts Property 'map' does not exist on type 'Observable'

Если я игнорировать эту ошибку и перейти к браузеру, Я такой же сообщение.

Я создал свой проект с angular-cli, а моя угловая версия на самом деле 2.4.4. Сервер работает с инструментом ng serve.

Я сделал Somes поисков:

property map does not exist on observable response in angular -> Я не использую Visual Studio 2015, а также, я в курс моего визуального кодекс студии (и это, кажется, что ошибка была решена бен через некоторое время).

Angular 2 2.0.0-rc.1 Property 'map' does not exist on type 'Observable<Response>' not the same as issue report -> Моей командная строка ничего не знает о tsc и после того, как я сделал Любую идею npm i typescript -g (и перезапущен как VS code и ng serve

что происходит неправильно (я полагаю, что-то не до на сегодняшний день, но я не знаю, что и как обновлять его).

+0

Вы должны ссылаться на 'библиотеку RxJs' в вашем модуле/компонента/сервиса (то, что вы пишете здесь) как' Observable' (тип вернулся из http.get' является частью этой библиотеки ,В учебниках на угловом сайте есть хорошее объяснение того, как вы потребляете «Observable » и как создать сопоставление ссылок для более распространенных методов, которые вы хотите использовать, например, «map» в RxJs lib. – Igor

+0

@ Igor: Я думаю, вы правы. Должен ли я делать что-то особенное для «установки» 'RxJs', потому что просто добавление' import {Observable} из 'rxjs/Observable'; 'к моей службе не решает проблему – J4N

+0

См. Мой ответ ниже, карта считается «оператором», и для загрузки вам необходимо объявить зависимость импорта. Поскольку это довольно распространенный оператор для использования (вместе с другими), проще создать общий файл импорта, а затем импортировать его. Это в значительной степени взято из справки/документации Angular. – Igor

ответ

3

вы должны ссылаться на RxJs библиотеку в вашем модуле/компонента/сервиса (то, что вы пишете здесь) в Observable (тип, возвращаемый с http.get) является часть этой библиотеки. RxJs имеет много операторов, которые можно использовать как map, catch, do и т.д., но для того, чтобы использовать их вы должны ссылаться на файлы/модулей, которые они содержатся в.

учебников по угловому сайту имеет хорошее объяснение о том, как вы потребляете Observable<T> и как создать сопоставление ссылок для более распространенных методов, которые вы хотите использовать, например, в карте RxJs. Создав один файл со ссылками на наиболее часто используемые операторы и типы в библиотеке RxJs, вам нужно будет только ссылаться на этот файл ссылки, в котором вы хотите использовать те типы, которые сохраняются при повторном добавлении всех операторов/типов в каждом файл в вашем проекте, где вы хотите воспользоваться ими.

Вот пример файла (с именем rxjs-operators.ts для этого примера) с некоторыми из наиболее часто используемых методов.

// Observable class extensions 
import 'rxjs/add/observable/of'; 
import 'rxjs/add/observable/throw'; 

// Observable operators 
import 'rxjs/add/operator/catch'; 
import 'rxjs/add/operator/debounceTime'; 
import 'rxjs/add/operator/distinctUntilChanged'; 
import 'rxjs/add/operator/do'; 
import 'rxjs/add/operator/filter'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/switchMap'; 

К верхней части файла, который вы хотите использовать .map (или любой другой метод) добавьте эту строку.

import './rxjs-operators'; 
+1

Спасибо, урок, который я следовал, также объяснял это. После показа демо, я был слишком нетерпелив, чтобы проверить, я думаю :( – J4N