AngularFire2:找不到命名空间 "firebase"

AngularFire2: Cannot find namespace "firebase"

我正在尝试使用 angularfire 构建一个 ng2 应用程序。在快速入门之后,我收到以下错误:

cannot find namespace 'firebase'

似乎是打字的问题,虽然安装了所有这些。关于这个问题有什么想法吗?

似乎已经报告了错误并且(希望)正在处理。在这里查看:

https://github.com/angular/angularfire2/issues/461

有些人成功修改了 typings.json(删除了对 firebase 的依赖)或安装了 @next 版本的 typescript。就我个人而言,我目前遇到了同样的错误。

我希望这个错误最终得到修复(很快 ;))

编辑:似乎 'bug' 是几个必须恰到好处的依赖项的组合。最后,我将 PATH 变量设置为指向 Program Files 下的旧 tsc 安装。出于某种原因,它被用来代替节点包 typescript.

中的(首选)

它的工作原理如 the issue 中所述。

tsconfig.json:

"types": [ "jasmine", "firebase" ]

简直不敢相信修起来这么容易。

如果你有一个新的 angular 2.0 CLI 项目 - 这会起作用 - 我不知道你的特定设置:

  1. 确保您的 tsconfig.json 看起来像这样:

"compilerOptions": {

"declaration": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"lib": ["es6", "dom"],
"mapRoot": "./",
"module": "es6",
"moduleResolution": "node",
"outDir": "../dist/out-tsc",
"sourceMap": true,
"target": "es5",
"typeRoots": [
"../node_modules/@types"  /// - here - types are pointing to this @types folder inside node_modules.
]

}

  1. @types 中创建一个名为 firebase 的新文件夹。
  2. firebase 中创建一个新文件,将其命名为 index.d.ts
  3. 将内容形式 here 放入 index.d.ts
  4. here 是官方 angularfire2 安装文档。故障排除部分不准确 - 对于 angular cli 项目。 请确保不要在 tsconfig.json 或 typings.json 中放置任何声明或内容(截至 2016 年 9 月 28 日)。

看起来像是将类型添加到 Angular 2.0 CLI 项目的推荐方法 - 是将它们添加到 node_modules/@types 文件夹中。正如您所见,jasmine 类型的文件夹看起来相似 - 并由 CLI 脚手架自动添加到那里。

尝试在您的导入下添加这一行

declare let firebase: any; // <== THERE IS AN ERROR IN THE .d.ts file

import { AngularFireModule } from 'angularfire2';

declare let firebase: any; // <== THERE IS AN ERROR IN THE .d.ts file

当你将 vanilla js 添加到 typescript 时,你会这样做,它基本上是在告诉 typescript ‘firebase’变量存在,即使你现在没有看到它,如果它让我知道,它应该有望消除错误。

解决方案:

1.Inside package.json, remove ^ from "firebase": "^4.8.1"

1.1 Downgrade Firebase from 4.8.1 to 4.8.0 by changing 4.8.1 to 4.8.0

1.2 End result should look like this: "firebase": "4.8.0"

2. Run npm update in the Project Root. NPM will downgrade Firebase for ya

3. Run ng serve --open to check for compilation errors. There shouldn't be any.

原因:

Firebase 引入了一些 AngularFire2 尚未处理的重大更改。在 AngularFire2 团队解决之前,这就是解决方案。

添加一个竖起大拇指的表情符号,并将遇到同样问题的人引导至此处!会节省他们很多时间!