0

我正在开发一个react-native项目,该项目利用该包react-native-firebase作为提供远程和本地通知的解决方案。

一切都很好,如果我执行以下操作:

import firebase from 'react-native-firebase'

...
const messagingPermission = await firebase.messaging().hasPermission()

上面的代码运行良好,没有任何抱怨。然而,

import firebase from 'react-native-firebase'

...
const customNotification = new firebase.notifications.Notification()

抱怨

[ts] Property 'Notification' does not exist on type '{ (): Notifications; 
nativeModuleExists: boolean }'

但是,如果我按照输入(ctrl+click)进行操作,那么我可以在Notifications那里看到该类并输入。

我是否在这里错过了重要的打字稿课程或我忽略的问题?我很肯定包裹输入正确,所以这里发生了什么?

tsconfig.json如果您认为有帮助,我可以提供我的。

{
    "compilerOptions": {
        "target": "es2015",
        "module": "es2015",
        "moduleResolution": "node",
        "allowSyntheticDefaultImports": true,
        "noImplicitAny": false,
        "preserveConstEnums": true,
        "allowJs": false,
        "sourceMap": true,
        "noImplicitReturns": true,
        "noUnusedParameters": true,
        "noUnusedLocals": true,
        "watch": false,
        "skipLibCheck": true,
        "jsx": "react",
        "outDir": "artifacts",
        "rootDir": "src",
        "baseUrl": "src",
  },
  "filesGlob": [
      "typings/index.d.ts",
      "app/**/*.ts",
      "app/**/*.tsx"
  ],
  "types": [
      "react",
      "react-native",
      "jest"
  ],
  "exclude": [
      "android",
      "ios",
      "build",
      "node_modules"
  ],
  "compileOnSave": true
}

编辑:添加 tsconfig

4

2 回答 2

2

这看起来像是我们的疏忽——我们错过了 Typescript 定义中的静态类型。我刚刚推出了一个修复程序,该修复程序将在今天晚些时候作为 v4.0.2 的一部分登陆:https ://github.com/invertase/react-native-firebase/commit/590d69ce8985842e830c234e18d020efc98e76c8

于 2018-04-12T07:52:47.883 回答
0

尝试notifications作为函数调用:firebase.notifications().Notification()


为什么?

查看错误消息:

[ts] Property 'Notification' does not exist on type '{ (): Notifications; 
nativeModuleExists: boolean }'

这意味着firebase.notifications是类型{ (): Notifications; nativeModuleExists: boolean }

属性(): Notifications是什么意思?在接口中,()没有名称的属性表示接口本身是可调用的/表示一个函数,在此函数中返回一个Notifications对象。这些可调用接口也可以有其他属性,比如nativeModuleExists这里,因为函数是 JavaScript 中的一等对象。

无论如何,错误消息准确地说明了哪里出了问题,但是它用来这样做的语法有点模糊——使得本质上是一个错字的问题看起来像是一个更复杂的问题。

于 2018-04-12T03:21:50.380 回答