Используя List
, вы можете предотвратить ошибки кастинга. Очень полезно избегать ошибки runtime .
Пример:
Здесь (используя ArrayList
) вы можете скомпилировать этот код, но вы увидите ошибка выполнения позже.
ArrayList array1 = new ArrayList();
array1.Add(1);
array1.Add("Pony"); //No error at compile process
int total = 0;
foreach (int num in array1)
{
total += num; //-->Runtime Error
}
Если вы используете List
, вы избегаете этих ошибок:
List list1 = new List();
list1.Add(1);
//list1.Add("Pony"); //<-- Error at compile process
int total = 0;
foreach (int num in list1 )
{
total += num;
}
Ссылка: MSDN
Я обновил свой плагин gulp-typescript до последней версии (2.13.0), и теперь он компилируется без сбоев.
UPDATE 1: Я ранее использовал gulp-typescript версию 2.12.0
ОБНОВЛЕНИЕ 2: Если вы обновляетесь до Angular 2.0.0-rc.1, вам необходимо сделать следующее в файле appBoot.ts:
///<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.d.ts
Предполагается, что вы установили пиктограммы es6-shim, как показано здесь:
Подробнее о типизациях установите с углового здесь: https://angular.io/docs/ts/latest/guide/typescript-configuration.html#!#typings
Вам нужно импортировать оператор map
:
import 'rxjs/add/operator/map'
В моем случае недостаточно включить только карту и обещать:
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
Я решил эту проблему, импортировав несколько компонентов rxjs, поскольку официальная документация рекомендует:
1) Импортировать инструкции в один файл приложения / 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';
В example.component.ts
import { Observable } from 'rxjs';
В example.component.html
Observable.interval(2000).map(valor => 'Async value');
В 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'));
Аналогичные сообщения об ошибках появятся при переходе с версии 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 => {}))
Источник здесь
Rxjs 5.5 «Свойство« map »не существует для типа Observable.
Проблема связана с тем, что вам нужно добавить трубку вокруг всех операторов.
Изменить это ,
this.myObservable().map(data => {})
к этому
this.myObservable().pipe(map(data => {}))
И
Импортируйте карту, подобную этой,
import { map } from 'rxjs/operators';
Она решит вашу вопросы.
UPDATE 29.09.2016 для Angular 2.0 Final & amp; VS 2015
Обходной путь больше не нужен, чтобы исправить вам просто нужно установить TypeScript версии 2.0.3 .
Исправить из редактирования в этот комментарий для github .
import 'rxjs/add/operator/map';
& amp;
npm install rxjs@6 rxjs-compat@6 --save
работал для меня
Я столкнулся с подобной ошибкой. Это было решено, когда я делал эти три вещи:
npm install rxjs@6 rxjs-compat@6 --save
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
import { Observable, Subject, asapScheduler, pipe, of, from, interval, merge, fromEvent } from 'rxjs';
Если вы используете angular4, используйте ниже импорт. он должен работать.
import 'rxjs / add / operator / map';
Если вы используете угловую5 / 6, используйте карту с трубой и импортируйте ее ниже одного
импортировать {map} из "rxjs / операторов";
Как сказал Джастин Скофилд в своем ответе, для последнего выпуска 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 требуется машинописный текст 1.8, поэтому машинописная версия 1.7 сообщает об этой ошибке.
Я решил эту проблему, обновив ее до последней версии.
tsc
из команды, пожалуйста, проверьте tsc -v
;-) Использование & quot; scripts & quot; еще лучше, см. stackoverflow.com/a/37034227/478584
– tomaszbak
4 May 2016 в 17:29
Добавьте приведенную ниже команду в ваш файл * .service.ts
import { map } from "rxjs/operators";
**********************************************Example**Below**************************************
getPosts(){
this.http.get('http://jsonplaceholder.typicode.com/posts')
.pipe(map(res => res.json()));
}
}
Я использую окна 10; / g2]
angular6 с машинописным текстом V 2.3.4.0
Если вы видите эту ошибку в VS2015, есть проблема github & amp; обходной путь, упомянутый здесь:
https://github.com/Microsoft/TypeScript/issues/8518#issuecomment-229506507
Это помогло мне решить проблему property map does not exist on observable
проблема. Кроме того, убедитесь, что у вас есть машинописная версия выше 1.8.2
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TypeScript\typescriptServices.js
на typescriptService работала для VS 15. ( restart vs после замены файла i>)
– tchelidze
28 May 2016 в 09:57
map
, чтобы включить примечание для пользователей с аналогичными проблемами. Большое спасибо :) – Meligy 1 May 2016 в 06:26import 'rxjs/Rx';
// Загружает все функции – VahidN 10 May 2016 в 10:55