Firebase 客户端库无法键入



我正在尝试最新的Firebase npm模块(4.8.1)。我正在使用带有 webpack 捆绑的 commonjs 模块系统。为了确保我得到我需要的打字,我的package.json中有以下内容:

"dependencies: {
"firebase": "^4.8.1"
},
"devDependencies": {
"@firebase/app": "^0.1.5",
"@firebase/app-types": "^0.1.0",
"@firebase/auth": "^0.3.1",
"@firebase/auth-types": "^0.1.0",
"@firebase/database": "^0.1.6",
"@firebase/database-types": "0.1.0",
}

当我用tsc转译时,出现以下错误:

node_modules/@firebase/database/dist/esm/src/api/Database.d.ts(4,33):错误 TS2307:找不到模块"@firebase/app-types/private"。

node_modules/@firebase/database/dist/esm/src/core/AuthTokenProvider.d.ts(17,39):错误 TS2307:找不到模块"@firebase/应用程序类型/private"。

我觉得这很奇怪,原因有几个:

  1. 我使用的是CommonJS模块系统而不是ESM
  2. 我假设@firebase/data-types是用来提供类型而不是实现代码的。这就是为什么我将其列为devDependency而不是依赖项的原因
  3. 即使我将所有@firebase/*切换到"依赖项",它仍然会给出相同的错误
  4. 我确实看到其他人在这里发帖说 Firebase 4.8.1 中有一个错误,回滚到 4.8.0 可能会解决问题......但据我所知,4.8.0 有各种"隐含的任何"错误(也许我可以证明关闭这些错误是合理的),但在导出的 API 中还有许多其他弃用。简而言之,在我看来,4.8.1 作为打字参考要好得多。

使用以下tsconfig.json它对我来说效果很好:

{
"compilerOptions": {
"target": "es2015",
"module": "commonjs",
"moduleResolution": "node",
"inlineSourceMap": true
}
}

src/index.ts中,我只是像这样导入:

// This import loads the firebase namespace along with all its type information.
import * as firebase from 'firebase';
const firebaseApp = firebase.initializeApp({
apiKey: '<your-api-key>',
authDomain: '<your-auth-domain>',
databaseURL: '<your-database-url>',
storageBucket: '<your-storage-bucket>',
messagingSenderId: '<your-sender-id>'
});

在我修改tsconfig.json之前,我遇到了类似的问题:

{
...
"devDependencies": {
...
},
"dependencies": {
...,
"firebase": "^4.8.1"
}
}

我希望这有所帮助!

最新更新