Angular 2 2.0.0-rc.1 属性 'map' 不存在于类型'Observable<Response>' 与问题报告不同

Posted

技术标签:

【中文标题】Angular 2 2.0.0-rc.1 属性 \'map\' 不存在于类型\'Observable<Response>\' 与问题报告不同【英文标题】:Angular 2 2.0.0-rc.1 Property 'map' does not exist on type 'Observable<Response>' not the same as issue reportAngular 2 2.0.0-rc.1 属性 'map' 不存在于类型'Observable<Response>' 与问题报告不同 【发布时间】:2016-08-30 01:58:39 【问题描述】:

虽然这看起来与 Angular 2 beta.17: Property 'map' does not exist on type 'Observable<Response>' 相同的问题

这是一个新版本,这些解决方案不适用于这个新发布的版本

我已更新到最新的 Angular 2 rc1,但无法编译。我遇到了无法识别“Promise”的问题,我最终直接安装了 es6-promise 输入来解决该问题。我试过放入各种导入语句,但没有运气。我在 Visual Studio 2015 中运行

import 'rxjs/Rx';
import Observable from 'rxjs/Observable';
import Observer from 'rxjs/Observer';
import 'rxjs/add/operator/share';
import 'rxjs/add/operator/map';

return this._http.post(url, null, args).map(extractData).toPromise();

但继续获取“可观察”类型上不存在属性“地图”

我的包文件是

"dependencies": 
"@angular/common": "2.0.0-rc.1",
"@angular/compiler": "2.0.0-rc.1",
"@angular/core": "2.0.0-rc.1",
"@angular/http": "2.0.0-rc.1",
"@angular/platform-browser": "2.0.0-rc.1",
"@angular/platform-browser-dynamic": "2.0.0-rc.1",
"@angular/router": "2.0.0-rc.1",
"@angular/router-deprecated": "2.0.0-rc.1",


"systemjs": "0.19.27",
"es6-shim": "^0.35.0",
"reflect-metadata": "^0.1.3",
"rxjs": "5.0.0-beta.6",
"zone.js": "^0.6.12",

"bootstrap": "^3.3.6",
"breeze-client": "~1.5.6",
"handlebars": "^4.0.5"
,
"devDependencies": 
"typescript": "^1.8.10",
"typings": "^0.8.1",
"gulp": "^3.9.1",
"jasmine-core": "~2.4.1",
"karma": "^0.13.22",
"karma-chrome-launcher": "^0.2.3",
"karma-coverage": "^0.5.5",
"remap-istanbul": "^0.6.3",
"karma-jasmine": "^0.3.8",
"karma-jasmine-html-reporter": "^0.2.0",
"http-server": "^0.9.0"

【问题讨论】:

你检查***.com/questions/36947748/…了吗? 是的,这是针对不同版本的,那里的解决方案无法修复此处的错误。我正在使用每个 angular.io 包定义的最新版本 丹 - 运气好吗?我在 ng-conf 在 VS 2015 上面临同样的问题。我的头撞在墙上。 不,不幸的是,它可以编译,但您仍然会在 VS 中看到所有这些错误错误。不管你导入什么,它们仍然存在 快速修复:github.com/Microsoft/TypeScript/issues/… 【参考方案1】:

您是否尝试过此导入?它对我有用

 import Observable from 'rxjs/Rx';
 import 'rxjs/add/operator/map';

【讨论】:

值得注意的是,您还必须为 catch 添加 import 'rxjs/add/operator/catch。 (基本上你必须添加所有单独的功能) 在使用其他 Observable 方法(如 publish(),也需要 import 'rxjs/add/operator/publish'; 时知道这一点也很重要 从 'rxjs/Observable' 导入 Observable 时出现问题。而是添加 import Observable from 'rxjs/Rx';解决了问题,个别函数不需要导入。【参考方案2】:

这是解决方法。 jjokela 和 VahidN 也用他们的 cmets 暗示了这一点。 我通过查看 Deborah Kurata 的博客文章 here 找到了它。她概述了使用 Angular2 和 ASP.NET 4 项目模板而不是我正在使用的新 ASP.NET 5 RC 模板。

要修复,请参阅https://github.com/Microsoft/TypeScript/issues/8518#issuecomment-229506507 上的这些说明

此修复程序旨在包含在 Visual Studio 的 Typescript 2.0 版本中。直到您可以执行以下手动步骤。

对于 VS 2015(更新 3):

安装 VS 2015 更新 3 将 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TypeScript\typescriptServices.js 替换为 https://raw.githubusercontent.com/Microsoft/TypeScript/Fix8518-U3/lib/typescriptServices.js 中的文件。不过,请先进行本地备份。

对于 VS 2015(更新 2):

安装 VS 2015 更新 2 将 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TypeScript\typescriptServices.js 替换为 https://raw.githubusercontent.com/Microsoft/TypeScript/Fix8518/lib/typescriptServices.js 中的文件。不过,请先进行本地备份。

对于 VS 2013:

安装 TypeScript 1.8.5 (https://www.microsoft.com/en-us/download/details.aspx?id=48739) 将 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TypeScript\typescriptServices.js 替换为 https://raw.githubusercontent.com/Microsoft/TypeScript/Fix8518-Dev12/lib/typescriptServices.js 中的文件。不过,请先进行本地备份。

【讨论】:

我在使用“es6”编译的 rxjs 的“toPromise”扩展上遇到了类似的问题(我正在关注angular.io/docs/ts/latest/tutorial/toh-pt6.html 的当前 Angular2 教程)。此解决方法解决了问题,谢谢。 这对我有用,显然只适用于 Windows。必须强制关闭 devenv.exe 进程才能完全发挥作用。 您提到了更新 2 和 3。我有 VS 2015 更新 1 并遇到同样的问题。如何解决?【参考方案3】:

我遇到了同样的问题。将此行添加到 AppComponent 类后似乎已经解决。

import 'rxjs/Rx'; 

【讨论】:

【参考方案4】:

除了

import  Observable  from 'rxjs/Rx';

【讨论】:

【参考方案5】:

该问题很可能与尚未看到完整 VS 版本的 https://github.com/Microsoft/TypeScript/issues/7415 有关。可以在本地构建源代码并使用VS Dev Mode。

【讨论】:

“解决”我的问题是降级到 rxjs 5.0.0-beta.2。 Visual Studio 处理类型的方式似乎存在错误。 确实有一个bug,已经修复。只是还没有发布的安装程序。 github 讨论中提到的解决方法(将 typescriptServices.js 文件替换为新文件)为我修复了 VS2015 Typescript 智能感知问题。【参考方案6】:

升级到 Angular2 RC 后我遇到了同样的问题。我得到属性 'map' 的 VS 2015 Intellisense 错误在'Observable' 类型上不存在。

我使用 grunt-ts 进行转译,因此它不会影响我的转译能力,但在编辑器中将其视为以前不存在的错误,这很烦人。

我认为问题在于 Visual Studio 下载的 Typescript。 https://www.microsoft.com/en-us/download/details.aspx?id=48593

它目前是 1.8.6 版,我相信它可以驱动 Visual Studio 的智能感知,如果你配置它的话,它还会构建 typescript 编译。所以我们可能只需要等待新版本的 Typescript for Visual Studio 发布。

【讨论】:

您通过将外部 Web 工具设置为指向 .\node_modules\.bin 来调用告诉 VS 要运行哪个工具,这样您就可以使用 package.config 中定义的版本构建/运行 但这也控制智能感知吗?或者是打字稿智能感知在 VS 中更深层次的联系。 说实话,但确保您设置这些工具以便至少编译到最新版本仍然很高兴;)【参考方案7】:

Dan - 一旦我将 Observable 添加到我的代码中,一旦我升级到 Angular 2 rc1,我就遇到了一系列试图成功运行的问题。为我解决的问题是添加

    "emitDecoratorMetadata": true,

到我的 tsconfig.json 文件。一旦我添加了该行,它就会在 IIS 和使用 npm start 中正确呈现。我完整的 tsconfig.json 文件如下:

"compilerOptions": 
"noEmitOnError": true,
"removeComments": false,
"sourceMap": true,
"target": "es5",
"experimentalDecorators": true,
"module": "commonjs",
"moduleResolution": "node",
"emitDecoratorMetadata": true,
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": true  ,  "exclude": [
"node_modules",
"typings/main",
"typings/main.d.ts"   ]

(抱歉格式化……时间不早了)。希望这会有所帮助。

【讨论】:

如果您不发出装饰器,ang2 将无法正常工作,但如果您使用的是 Visual Studio 并且想要正确的 IntelliSense,则这并不能解决此问题。 我最终放弃了 Visual Studio,将使用 VS Code 或 Atom 来编写我的 Angular 2 代码……将继续为我们所有的 API 使用“常规”VS。生活在 2 个 IDE 世界中很痛苦,但要花费太多时间来努力让简单的事情正常工作。 我和发帖人有同样的问题,这并不能解决问题。看来大卫 D 的回复是原因【参考方案8】:

在 toPromise.d.ts 中

添加“从'../../Observable'导入Observable;”

import  ToPromiseSignature  from '../../operator/toPromise';
import Observable from '../../Observable';
declare module '../../Observable' 
    interface Observable<T> 
        toPromise: ToPromiseSignature<T>;
    

你可以对 map.d.ts 做同样的事情

希望这会有所帮助。

【讨论】:

【参考方案9】:

你的进口很好。问题的根本原因在https://github.com/ReactiveX/rxjs/issues/1540中描述

要修复它,您需要升级到最新的 typescript 1.8。

请注意,当您运行 tsc 时,您正在使用全局打字稿(检查 tsc -v)要升级全局打字稿,请运行 npm i typescript -g

如果要使用package.json中定义的typescript,则需要通过"scripts"执行,即添加"build": "tsc"并使用npm run build执行。

【讨论】:

如果您查看我的包文件,我使用的是 1.8.10 版。我正在使用 Visual Studio 2015 注意我的 vs 2015 外部网络工具设置为 .\node_modules\.bin 所以我运行的是最新的 TS 版本【参考方案10】:

我也有同样的问题。我正在运行 TypeScript 1.8.11。恐怕我没有解决办法。我认为这是 rxjs 或 angular 2 rc 1 的真正问题。

我将 rxjs 降级为 beta 2,它解决了这个问题。不幸的是,角度 rc1 依赖于 beta 6,因此完整的 npm 安装失败。

【讨论】:

【参考方案11】:
import  Injectable  from '@angular/core';
import  Http, Response, Headers, RequestOptions from '@angular/http';    
import 'rxjs/Rx';
import Observable from 'rxjs/Observable';
import 'rxjs/add/operator/map';

return this._http.post(url, null, args).map(this.extractData)

制作函数提取数据

试试这个。它会为你工作。 它对我有用。

【讨论】:

【参考方案12】:

我为ag-grid angular 2 的组件here 工作。

我需要你得到的 Promise 的类型: tsd install es6-shim

然后在您的打字稿选项中,将下载的类型文件指定为要在 tsconfig.json 中编译的文件之一,即:


  "compilerOptions": 
    "target": "es5",
    "module": "commonjs",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false,
    "outDir": "lib"
  ,
  "files": [
    "typings/es6-shim/es6-shim.d.ts", // the typings file
    "app/boot.ts" // you application
  ]

【讨论】:

es6-shim 输入并不能解决 Observable 'map' 问题,这导致我的项目出现 100 个错误【参考方案13】:

es6-shim 安装类型为我解决了同样的问题:

typings i es6-shim --ambient --save-dev

这是一个breaking change in beta 6,为了解决这个问题,您可以在 angular 中包含对内部类型文件的引用。不幸的是,这些已在 2.0.0-rc.0 中删除,因此您现在必须依赖外部类型来完成相同的事情。

【讨论】:

我确实有 es6-shim 类型,并且会构建,但是即使我已经导入了 rxjs/Rx,我仍然在 Visual Studio 2015 中遇到错误【参考方案14】:

如果您刚刚升级到 Angular2 rc1,请确保您使用的是新的 @angular import 语句,而不是 angular2:

`import  Component  from 'angular2/core';`

成为,

`import  Component  from '@angular/core';`

我知道这看起来很简单,但它可能会导致这个问题。

【讨论】:

【参考方案15】:

查找 Visual Studio 2015 的 TypeScript 测试版 2.0.0。 此版本解决了我机器上的相同问题。但请记住,这是一个测试版。

【讨论】:

【参考方案16】:

如果您要从 Angular2 候选版本(即 2.0.0-rc.1 )升级到 2.x.x 版本,您需要:

    更新您的 package.json 以使用 https://github.com/angular/quickstart/blob/master/package.json 处的文件保持最新状态

    更新您的 systemjs.config.js 文件,使其与 https://github.com/angular/quickstart/blob/master/systemjs.config.js 处的文件保持同步

    将导入语句更改为:

    import Observable from 'rxjs'

【讨论】:

以上是关于Angular 2 2.0.0-rc.1 属性 'map' 不存在于类型'Observable<Response>' 与问题报告不同的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 错误:无法绑定到“innerhtml”,因为它不是已知的本机属性

Angular 2、Http 和未设置 Content-Type “application/json”

Angular 2 - 检测绑定属性何时收到值

Angular 2 有条件地添加属性指令

Angular 2+:使用 onclick 更改属性

访问父视图属性的最佳方式(Ionic 2、Angular 2)