当打字看似存在时,对打字稿错误的困惑

时间:2018-04-11 15:40:29

标签: typescript react-native react-native-firebase

我正在使用包react-native的{​​{1}}项目作为提供远程和本地通知的解决方案。

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

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()

但是,如果我按照键入(ctrl + click)进行操作,那么我可以在那里看到类[ts] Property 'Notification' does not exist on type '{ (): Notifications; nativeModuleExists: boolean }' 并输入。

我在这里错过了一个重要的打字稿课程,还是我忽略了?我确定正确打包了包,所以这里发生了什么?

如果您认为有用,我可以提供Notifications

tsconfig.json

编辑:添加了tsconfig

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

尝试将notifications称为函数:firebase.notifications().Notification()

<强>为什么吗

查看错误消息:

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

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

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

无论如何,错误消息准确地说明了什么是错误的,但它用来做这么做的语法有点模糊 - 使得本质上是一个错字似乎是一个更复杂的问题。