Firebase客户端库失败的打字

时间:2018-01-08 13:37:41

标签: typescript firebase firebase-realtime-database

我正在尝试最新的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(179):error TS2307:找不到模块'@ firebase / app-types / private'。

我发现这很奇怪有几个原因:

  1. 我使用 CommonJS 模块系统而非 ESM
  2. 我假设@firebase/data-types是提供 typings 而不是实现代码。这就是为什么我把它列为 devDependency 而不是依赖
  3. 即使我将所有@firebase/*切换为“依赖关系”,它仍然会给出相同的错误
  4. 我确实看到其他人发布here Firebase 4.8.1中有错误,并且回滚到4.8.0可能会解决问题...但是我可以看到4.8.0已经全部一种“隐式任何”错误(也许我可以证明这是错误的),还有很多其他的导出API的弃用。简而言之,在我看来,4.8.1作为打字参考要好得多。

1 个答案:

答案 0 :(得分: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"
  }
}

我希望有所帮助!